1. cv2.imread参数
解析:
(1)cv2.IMREAD_COLOR:读入一副彩色图像,图像的透明度会被忽略,这是默认参数。
(2)cv2.IMREAD_GRAYSCALE:以灰度模式读入图像。
(3)cv2.IMREAD_UNCHANGED:读入一幅图像,并且包括图像的alpha通道。
2. cv2.namedWindow参数
解析:cv2.namedWindow('image', cv2.WINDOW_NORMAL)
说明:CV_WINDOW_NORMAL模式下可以手动调整窗口大小,而CV_WINDOW_AUTOSIZE模式(默认)下窗口将自动适应图像大小,无法手动调整。
3. Python进制转换
解析:
(1)其他进制转十进制
- 二进制转十进制,比如int('100', 2)
- 八进制转十进制,比如int('04', 8)
- 十六进制转十进制,比如int('0x4', 16)
- 十进制转二进制,比如bin(4)
- 十进制转八进制,比如oct(4)
- 十进制转十六进制,比如hex(4)
说明:cv2.waitKey(1) & 0xFF == ord('q')
5. plt坐标设置
(1)plt.axis([xmin, xmax, ymin, ymax])
(2)xlim(xmin, xmax)和ylim(ymin, ymax) #调整x,y坐标范围
(3)plt.xticks(fontsize=16, color='red', rotation=45)
(4)plt.yticks(fontsize=16, color='red', rotation=45)
6. 局部二值模式 [1]
解析:LBP(Local Binary Pattern,局部二值模式)是一种用来描述图像局部纹理特征的算子;它具有旋转不变性和灰度不变性等显著的优点。
7. cv2.erode()和cv2.dilate()
解析:
(1)腐蚀操作:卷积核沿着图像滑动,如果与卷积核对应的原图像的所有像素值都是1,那么中心元素的像素值就是1,否则为0。腐蚀可以断开两个连在一块的物体。
(2)膨胀:卷积核沿着图像滑动,如果卷积核对应的原图像的像素值中只要有一个是1,那么中心元素的像素值就是1,否则为0。膨胀可以连接两个分开的物体。
8. 形态学梯度
解析:形态学梯度就是一幅图像膨胀与腐蚀的差别。gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)。
9. 礼帽和黑帽
解析:
(1)礼帽:原始图像与进行开运算之后得到的图像的差。tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)。
(2)黑帽:进行闭运算之后得到的图像与原始图像的差。blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)。
10. 形态学操作之间的关系
解析:
(1)开运算:
(2)闭运算:
(3)形态学梯度:
(4)礼帽:
(5)黑帽:
11. 结构化元素
解析:
(1)Rectangular Kernel:cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))
(2)Elliptical Kernel:cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5,5))
(3)Cross-shaped Kernel:cv2.getStructuringElement(cv2.MORPH_CROSS, (5,5))
12. ndimage
解析:
(1)ndimage.label:标记连接成分,比如label_im, nb_labels = ndimage.label(mask)。
(2)ndimage.sum:计算每个区域的尺寸,比如sizes = ndimage.sum(mask, label_im, range(nb_labels + 1))。
说明:plt.axis([xmin, xmax, ymin, ymax]);xlim(xmin, xmax)和ylim(ymin, ymax);plt.axis('equal') #坐标轴的长度单位设成相等。
13. Lab颜色空间
解析:Lab颜色空间中的L分量用于表示像素的亮度,取值范围是[0,100],表示从纯黑到纯白;a表示从红色到绿色的范围,取值范围是[127,-128];b表示从黄色到蓝色的范围,取值范围是[127,-128]。
14. OpenCV中的图像去噪(非局部平均值去噪算法)
解析:
(1)cv2.fastNlMeansDenoising():使用对象为灰度图。
(2)cv2.fastNlMeansDenoisingColored():使用对象为彩色图。
(3)cv2.fastNlMeansDenoisingMulti():适用于短时间的图像序列(灰度图像)。
说明:imgtoDenoiseIndex设置哪些帧需要去噪,需要传入一个帧的索引。temporaWindowSize设置用于去噪的相邻帧的数目(奇数)。在这种情况下temporaWindowSize帧的图像会被用于去噪,中间的帧就是要去噪的帧。例如,如果我们传入5帧图像[0, 1, 2, 3, 4],imgToDenoiseIndex = 2和temporalWindowSize = 3,那么第一帧,第二帧,第三帧图像将被用于第二帧图像的去噪。
(4)cv2.fastNlMeansDenoisingColoredMulti():适用于短时间的图像序列(彩色图像)。
相关参数,如下所示:
(1)h:决定过滤器强度。h值高可以很好的去除噪声,但也会把图像的细节抹去(取10的效果不错)。
(2)hForColorComponents:与h相同,但适用于彩色图像。
(3)templateWindowSize:奇数(推荐值为7)。
(4)searchWindowSize:奇数(推荐值为21)。
说明:对于彩色图像,要先转换到CIELAB颜色空间,然后对L和AB成分分别去噪。
15. OpenCV中的图像修补
解析:
图像修补基本思想是使用坏点周围的像素取代坏点,这样它就看起来和周围像素比较像了。eg:cv2.inpaint(src, inpaintMask, inpaintRadius, flags[, dst]) → dst。其中,flags包括INPAINT_NS和INPAINT_TELEA。
说明:图像去噪和图像修补都属于计算摄影学的范畴。
16. 鱼眼镜头和广角镜头
解析:
(1)鱼眼镜头是一种焦距为16mm或更短的并且视角接近或等于180°的镜头,它是一种极端的广角镜头。
(2)广角镜头是一种焦距短于标准镜头、视角大于标准镜头、焦距长于鱼眼镜头、视角小于鱼眼镜头的摄影镜。广角数码相机的镜头焦距很短,视角较宽,而景深却很深,比较适合拍摄较大场景的照片,如建筑、风景等题材。
17. np.where
解析:
numpy.where(condition[, x, y]):当conditon的某个位置的为true时,输出x的对应位置的元素,否则选择y对应位置的元素。需要说明的是如果np.where()接收一个参数,那么返回符合条件的下标。
18. OpenCV2:Mat的type属性
解析:
命名规则为CV_(位数)+(数据类型)+(通道数)。U(unsigned integer)表示的是无符号整数,S(signed integer)表示的是有符号整数,F(float)表示的是浮点数。 C1,C2,C3,C4分别表示1,2,3,4通道。比如,CV_16UC2表示的元素类型是一个16位的无符号整数,并且通道数为2。
19. cv.filter2D()
解析:
cv.Filter2D(src, dst, kernel, anchor=(-1, -1)) → None:Convolves an image with the kernel. 比如,dst= cv2.filter2D(img, -1, kernel),其中-1(ddepth=-1)表示src.depth()和ddepth是相同的。src.depth()和ddepth的组合,如下所示:
(1)src.depth() = CV_8U, ddepth = -1/CV_16S/CV_32F/CV_64F
(2)src.depth() = CV_16U/CV_16S, ddepth = -1/CV_32F/CV_64F
(3)src.depth() = CV_32F, ddepth = -1/CV_32F/CV_64F
(4)src.depth() = CV_64F, ddepth = -1/CV_64F
说明:低通滤波器(LPF)可以去除噪音,模糊图像,而高通滤波器(HPF)可以找到图像的边缘。
20. cv2.blur()和cv2.boxFilter(均值滤波)
解析:
(1)cv2.blur(src, ksize[, dst[, anchor[, borderType]]]) → dst:Blurs an image using the normalized box filter. 比如,blur= cv2.blur(img, (5,5))。cv2.filter2D()是一个通用的2D滤波函数,它的使用需要一个核模板。该滤波函数是单通道运算的,如果是彩色图像,那么需要将彩色图像的各个通道提取出来,然后分别对各个通道滤波。
(2)cv2.boxFilter(src, ddepth, ksize[, dst[, anchor[, normalize[, borderType]]]]) → dst:Blurs an image using the box filter.
说明:如果不想使用归一化卷积模板,那么应该使用cv2.boxFilter(),并且传入参数normalize=False。
21. cv2.GaussianBlur()(高斯滤波)
解析:
cv2.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]]) → dst:Blurs an image using a Gaussian filter.需要指定高斯核的宽和高(必须是奇数),以及高斯函数沿X,Y方向的标准差。如果只指定X方向的标准差,那么Y方向也会取相同值。如果两个标准差都是0,那么函数会根据核函数的大小自己计算。高斯滤波可以有效的从图像中去除高斯噪音。比如,blur = cv2.GaussianBlur(img, (5,5), 0)根据窗口大小来计算高斯函数标准差。当然你也可以使用函数cv2.getGaussianKernel()构建一个高斯核。
22. cv2.medianBlur()(中值滤波)
解析:
cv2.medianBlur(src, ksize[, dst]) → dst:Blurs an image using the median filter. 中值滤波是用卷积核中像素的中值代替中心值,达到去噪声的目的,一般用于去除椒盐噪声。比如,median = cv2.medianBlur(img, 5),卷积核大小是一个奇数。
23. cv2.bilateralFilter()(双边滤波)
解析:
cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace[, dst[, borderType]]) → dst:Applies the bilateral filter to an image. 双边滤波同时使用空间高斯权重和灰度值相似性高斯权重。空间高斯函数确保只有邻近区域的像素对中心点有影响,灰度值相似性高斯函数确保只有与中心像素灰度值相近的才会被用来做模糊运算。因此,双边滤波能在保持边界清晰的情况下有效的去除噪声,因为边界处的灰度值变化比较大。cv2.bilateralFilter(img, d, 'p1', 'p2')函数有四个参数,其中d是邻域的直径,后面两个参数分别是空间高斯函数标准差和灰度值相似性高斯函数标准差。
24. 数字函数微分
解析:
(1)一阶微分定义满足条件
在恒定灰度区域的微分值为零;在灰度台阶或斜坡处微分值非零;沿着斜坡的微分值非零。
(2)二阶微分定义满足条件
在恒定区域微分值为零;在灰度台阶或斜坡的起点处微分值非零;沿着斜坡的微分值非零。
25. 非锐化掩蔽
解析:非锐化掩蔽的处理过程,如下所示:
(1)模糊原图像。
(2)从原图像中减去模糊图像(产生的差值图像称为模板)。
(3)将模板加到原图像上。
参考文献:
[1] LBP原理加源码解析:http://blog.csdn.net/xidianzhimeng/article/details/19634573
[2] 形态学图像处理:http://www.tuicool.com/articles/j6namy
[3] matplotlib绘图可视化知识点整理:http://www.cnblogs.com/zhizhan/p/5615947.html
[4] OpenCV-Python Tutorial(中文版)