本文为纯小白之作(So大佬读者们可以移步了),读者可结合视频,
相信大家“一定”(当否定的概率小到渺茫时我认为其为绝对事件bushi)看不到文末,
所以看到开头的小伙伴可以点个赞不?
——快裂开的小白
目录
#01图片的读取、展示和保存
彩色图像
图像中的每个像素值都分成B(蓝)、G(绿)、R(红)三个基色分量,每个基色分量直接决定其基色的强度,这样产生的色彩称为真彩色。例如图像深度为24,用B:G:R=8:8:8来表示色彩,则R、G、B各占用8位来表示各自基色分量的强度,每个基色分量的强度等级为2^8=256种。图像可容纳2^24=16M种色彩(24位色)。24位色被称为真彩色,它可以达到人眼分辨的极限,发色数是1677万多色,也就是2的24次方。
灰度图像
每个像素只有一个采样颜色的图像。这类图像通常显示为从最暗黑色到最亮的白色的灰度 ,像素0~255,越大越亮。
####waitkey()函数
cv2.waitkey(delay),delay 的单位为ms毫秒,当 delay 取大于0的值时,程序在给定的 delay 时间内等待用户按键触发,如果用户没有按下键,则继续等待下一个delay时间(循环),直到用户按键触发,退出程序。若设置delay为0,则表示必须点击窗口界面的×才能关闭程序。 若设置delay的值小于0,等待键盘按键,任何一个按键都会关闭程序,默认参数为小于0(我电脑上打印出来是-1)。 ———————————————— 版权声明:本文为CSDN博主「楊建业」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:opencv中cv2.waitkey()参数详解_csdn_bajie-CSDN博客_cv2.waitkey(0)
代码
'''_read_and_display.py
import cv2
img=cv2.imread('img.jpg',cv2.IMREAD_GRAYSCALE)
print(type(img))
print(img.shape)
'''
cv2.imshow('image',img)
k = cv2.waitKey(0)print(k)
'''
cv2.imwrite('img_gray.jpg',img)
print('yes')
常数用大写表示:cv2.IMREAD_GRAYSCALE == 0
(一开始imwrite函数不报错但却不能生成图片,然后康康学长说我的.py文件是在venv虚拟环境里的,所以跟视频里不一样,然后我点“项目”就突然好了。。。我不知道发生了啥。)
#02Canny边缘检测
边缘认定标准

cv2.Canny()函数,第一个参数是输入图像,第二、三个参数是minVal和maxVal
处在上、下阈值之间的为弱边缘,大于上阈值的为强边缘(我们认为它肯定是边缘),弱边缘中与强边缘相连的才视为真正的边缘:
如上图将c看作边缘,b为噪声。


选取四个梯度方向(实际上相当于八个方向,因为有正负)
代码
'''_edge_detect.py
import cv2
img = cv2.imread('img.jpg',cv2.IMREAD_GRAYSCALE)
edge_img=cv2.Canny(img,70,120)
cv2.imshow('edges',edge_img)
cv2.waitKey(0)
#03.roi_mask
·ROI ( region of interest , 感兴趣的区域 )
·数组切片
·布尔运算(与运算)
np.zeros_like(a) : 构建一个与a同维度的数组,并初始化为0.
fillPolly函数
fillPolly(img,ppt,npt,1,Scalar(255,255,255),lineType)
函数参数:
1.多边形将被画到img上
2.多边形的顶点集为ppt(注意点的顺序)
3.绘制的多边形顶点数目为npt
4.要绘制的多边形数量为1
5.多边形的颜色定义为Scarlar(255,255,255),即RGB的值为白色
注意:点构成的边界,要加中括号
颜色原理:
按位与:因为掩膜图片中ROI区域的白色部分,即255(二进制是11111111,故与此部分相与仍是原数,
但非ROI区域是黑色,即00000000,与全0相与那么就会变成0,即不感兴趣的部分就会变成黑色
numpy.array函数:
一个常见的错误包括用多个数值参数调用array而不是提供一个由数值组成的列表作为一个参数。
>>> a = array(1,2,3,4) # WRONG
>>> a = array([1,2,3,4]) # RIGHT
数组将序列包含序列转化成二维的数组,序列包含序列包含序列转化成三维数组等等。
>>> b = array( [ (1.5,2,3), (4,5,6) ] )
>>> b
array([[ 1.5, 2. , 3. ],
[ 4. , 5. , 6. ]])
数组类型可以在创建时显示指定
>>> c = array( [ [1,2], [3,4] ], dtype=complex )
>>> c
array([[ 1.+0.j, 2.+0.j],
[ 3.+0.j, 4.+0.j]])
还有一篇讲得很详细:

这篇博客介绍了OpenCV中图像处理的基础操作,包括图片的读取、展示和保存,以及彩色图像和灰度图像的概念。接着详细讲解了Canny边缘检测算法,阐述了边缘认定标准,并展示了如何应用Canny边缘检测。此外,还讨论了ROI区域的处理,使用fillPoly和bitwise_and函数进行图像操作。随后,文章深入介绍了霍夫变换,解释了二值图像和霍夫变换在寻找直线时的原理,并给出了霍夫变换的代码实现。最后,文章涉及离群值过滤和最小二乘拟合,用于进一步优化直线检测的结果。
最低0.47元/天 解锁文章
1391





