OpenCV 1
前言:开新坑辽,,
目录
计算机眼中的图像
视频的读取与处理
ROI区域
边界填充
数值计算
腐蚀操作
膨胀操作
开运算与闭运算
梯度计算
礼貌与黑帽
Sobel算子 梯度计算方法
scharr与laplacian
计算机眼中的图像
灰色图片,只有一个颜色通道
彩色图片,有三个颜色通道,并且都以矩阵的形式展示出来
%matplotlib inline :notebook特有,方便展示图片,少写代码
cv2.imread : 读取图像
cv2.imshow:展示图像
'image':给图像命名
cv2.waitKey(0):
“0”,指按键盘任意键都可以取消图片的展示。
“1000”or“10000”等等,指当图片展示时间到1000or10000时,图片会自动消失
cv2.destroyAllWindows():结束代码
视频的读取与处理
h(高):414
w(宽):500
c(通道数):3 说明是彩色图
若想读取图像为灰度图像,则
其中,
保存代码:
问题1 :
if vc.isOpened():
open, frame = vc.read()
else: open = False,
这里的open和frame指的是什么?
open
是一个布尔变量,用来标记视频文件是否成功打开。- 如果
vc.isOpened()
返回True
,说明视频文件已被成功打开,此时vc.read()
会返回两个值:第一个是一个布尔值True
或False
表示是否有正确读取到帧,第二个值是实际读取到的图像帧。 - 如果
vc.isOpened()
返回False
,说明视频文件没有被成功打开,此时直接设置open
为False
,而不调用vc.read()
方法。
- 如果
frame
是一个 NumPy 数组,代表从视频流中读取的一帧图像数据。如果成功读取了一帧,它将包含图像数据;如果没有成功读取或已经到了视频结尾,它的值将是None
。
问题2:while open:
ret, frame = vc.read()
if frame is None:
break
这里的ret,frame指的是什么?
open
是一个布尔变量,用来控制循环的进行。ret
是一个布尔值,表示是否成功读取到了一帧图像。如果vc.read()
成功读取了一帧图像,它将返回True
;否则返回False
。frame
同上,是一个包含读取到的图像数据的 NumPy 数组,如果读取失败或达到视频末尾,其值为None
。
问题3:ESC键是哪个键
ESC
键通常位于键盘的左上角,全称为“Escape”,通常用来中断或退出当前操作。在很多程序中,按下ESC
键可以关闭窗口或退出应用。ASCII码为27。
问题4:waitKey(?)
?:若为数字100,则展示速度较缓快
?:若为数字1000,则展示速度较缓
ROI区域
cat =img[0:50,0:200]
0:50,0:200:分别代表宽和长
r.shape:长宽是多少
cv2.merge:
在OpenCV中,cv2.merge()
函数是用来合并多个单通道图像(例如BGR)成一个三通道彩色图像。在这个例子中,(b,g,r)
表示三个单通道图像数组,它们会被合并成一个新的三通道图像。
img.shape
输出的是新合并后的图像的维度信息,包括高度、宽度和通道数。在这个例子中,结果为(414, 500, 3)
,表明合并后的图像有414行、500列以及3个颜色通道(即RGB)。
所以,cv2.merge()
的主要作用就是将多个单通道图像组合成一个完整的彩色图像。
BGR:分别的索引为0,1,2
因此,不要什么通道就将通道设置为0
比如:只保留R通道,即不需要BG通道,即将BG通道设置为0,即将索引编号为0,1设置为0
:,:,:表示所有,即整个图片的长度和宽度都要包含
边界填充
cv2.BORDER_WRAP的方法下,cde|abcde|abc为什么这样循环?
cv2.BORDER_WRAP: 用另一边的像素进行填充
假设我们有一个字符串
"abcde"
作为图像的一部分。在cv2.BORDER_WRAP
模式下,边界像素会“环绕”,即当超出边界时,会从相反的一侧取像素。考虑以下几种情况:
- 原始字符串:
"abcde"
- 向左扩展一个像素:在这种情况下,我们需要取左边的像素。由于我们已经处于字符串的起始位置,我们需要从字符串的末尾取一个像素。因此,我们得到
"e|abcde"
。- 向右扩展一个像素:在这种情况下,我们需要取右边的像素。由于我们已经处于字符串的末尾位置,我们需要从字符串的起始位置取一个像素。因此,我们得到
"abcde|a"
。现在,让我们看看您提供的字符串
"cde|abcde|abc"
是否可以解释为某种特定的扩展方式:
- 左边的扩展:
"cde"
。这看起来是从原始字符串"abcde"
的第三个字符开始,一直到字符串末尾。- 中间的原始字符串:
"abcde"
。- 右边的扩展:
"abc"
。这看起来是从原始字符串的起始位置开始,一直到倒数第二个字符。
数值计算
+10:矩阵里面的每一个值都加10
对于第一种相加的方式,要取模%256,即,若数值超过256,则取模
对于第二种相加的方式,若超过255,则计为255,若小于255,则就是那个数字
若要融合两张图片,必须使得两张图片的尺寸一致,也就是size一致,利用resize进行调整
第二种改变图片大小的方法,是放大or缩小多少倍数。(0,0)说明不指定具体数字
addWeighted(图片1,图片1的权重,图片2,图片2的权重,提亮多少)
R = ax1 + bx2 + b
腐蚀操作
iterations 为1,2,3 有以上不同的效果
膨胀操作
iterations 为1,2,3 有以上不同的效果
开运算与闭运算
梯度计算
得到边缘信息
礼貌与黑帽
礼帽:结果是不带刺的图案
黑帽:结果不带刺,只剩下一点字的轮廓了
Sobel算子 梯度计算方法
获得图案的轮廓
上减下,右减左
用上cv2.CV_64F以及convertScaleAbs的用处就是,即便是负数也可以。
scharr与laplacian
scharr能捕抓到更加细腻的细节