标签:yield pyplot opencv import des invisible 因此 功能 lang
工作环境Linux Ubuntu 16.04, Python 3.6, OpenCV 4.0。因为OpenCV的数据结构是基于numpy的,所以也要对numpy有大概的了解。
首先导入必要的库:
import cv2
import numpy as np
from matplotlib import pyplot as plt
由于Ubuntu下cv2的imshow展示图片功能会有bug,因此使用matplotlib来展示图片。
image = cv2.imread(‘test.jpg‘, -1)
没什么好说的,第一个参数文件路径,第二个参数是通道数,-1代表原图与原图保持一致,0代表转换为灰度图,1代表使用BGR通道读入。
需要注意的就是读入的图片是以np.ndarray类型存储的,且彩色图像的通道为BGR与常见的RGB不同。
cv2.imshow(‘image‘, image)
cv2.WaitKey(0)
cv2.destroyAllWindows()
imshow第一个参数是窗口名,string类。第二个是np.ndarray的数组。注意在下面要使用WaitKey,不然展示窗口就会闪一下,程序就继续运行了,参数代表停多长时间,0的话是除非干扰不然一直展示。
在Ubuntu下cv2的imshow会出bug, 使程序崩溃,因此使用pyplot展示图片,但需要注意pyplot的彩色图片是RGB的格式,所以展示图像时需要先转换通道。
对于灰度图像:
plt.imshow(image, cmap=‘gray‘)
plt.show()
对于彩色图像:
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
plt.imshow(image)
plt.show()
cv2.imwrite(‘image.jpg‘, image)
这边需要注意的是第一个参数文件名要加格式,比如.jpg .png 之类的。
多的话只对文件读入加一些。
读取某个文件夹下所有jpg或其他图片可以使用glob,但无法读取子文件夹下的。
import glob
PATH = ‘‘
for file in glob.glob(PATH + ‘*.jpg‘):
img = cv2.imread(file, -1)
也可以把jpg改为png等等。
那么如何读取一个文件夹内包括其子文件夹下的所有图片呢?这个时候要用os和fnmatch了。
import os
import fnmatch
def find_files(directory, pattern):
"""
Method to find target files in one directory, including subdirectory
:param directory: path
:param pattern: filter pattern
:return: target file path
"""
for root, dirs, files in os.walk(directory):
for basename in files:
if fnmatch.fnmatch(basename, pattern):
filename = os.path.join(root, basename)
yield filename
for filename in find_files(‘Home/Leon‘, ‘*.jpg‘):
img = cv2.imread(filename, -1)
这个看一下应该就知道怎么回事了把?find_files引用了一个网上的代码我忘了哪个了,,,
然后对读入的图片色彩空间转换,常用cvtColor
img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
第二个参数很多种,常用的色彩空间也就是把BGR转成RGB或者Gray,偶尔会用HSV,因为HSV不会有很多颜色的参数,对于图片的纹理啊这些特征的提取和处理很有用。HSV三个通道分别是:色调(H),饱和度(S),明度(V)。具体释义可以看维基百科的
https://zh.wikipedia.org/wiki/HSL%E5%92%8CHSV%E8%89%B2%E5%BD%A9%E7%A9%BA%E9%97%B4
实话讲对HSV我理解的不多,反正就是H跟颜色有关,是一种对于RGB的非线性变换,饱和度的话就是我们有时候会说有些颜色好艳啊之类的,我会用来提取纹理,V明度我一直就认为是类似灰度值了。印象中有专门的矩阵来乘可以完成两个色彩空间的变换。
转OpenCV 常用总结(Python) 知乎 https://zhuanlan.zhihu.com/p/61315333
标签:yield pyplot opencv import des invisible 因此 功能 lang
原文地址:https://www.cnblogs.com/liurenyu/p/12451992.html