https://www.bilibili.com/video/BV1PV411774y?p=2&vd_source=e7d12c9f66ab8294c87125a95510dac9
这里写目录标题
- 下载
- 计算机眼中的图像
- 视频
- gray = cv2.cvColor(frame, cv.COLOR_BGR2GRAY)
- ROI
- 边界填充
- 数值计算
- 图像融合
下载
pip install
input cv2
cv2.__version__
下载一些额外的拓展,包含一些额外的算法
注意版本号要与上面的opencv一致
pip install opencv-contrib-python==3.4.1.15
尝试pip安装,如果装不上就去
unofficial windows python 工具包去安装,查看版本匹配依赖
cp36 python版本3.6
计算机眼中的图像
import cv2 opencv读取的格式是bgr
%matplotlib inline
在jupyter内的特有方式 可以显示图片
img = cv2.imread('路径 cat.jpg', 第二个参数为彩色或是灰度 cv2.IMREAD_GRAYSCALE)
IMREAD_COLOR
cv2.imshow('image 窗口名称吧',img)
cv2.waitKey(0)
当参数为0时,程序会无限期地等待键盘输入,直到用户按下一个键为止。这通常用于简单的图像显示任务中,例如显示一张图像然后等待用户的确认。如果没有等待用户输入,图像将会立即消失。
当参数大于0时,程序会在等待指定的毫秒数之后继续运行,无论用户是否按下键盘上的任何键。例如,如果传递的参数为1000,程序将在1秒钟后继续运行。通常,当需要进行实时视频处理时,可以使用这种方式设置合适的等待时间,以平衡图像处理速度和响应速度。
cv2.destoryAllWindows()
img.shape
hwc形状格式 215 530 3
转为灰度图后只有 414 500
cv2.imwrite('xx.png',img)
type(img)
numpy.ndarray
img.size
207000
img,dtype
dtype('unit8')
注意opencv读取图像格式,可视化操作时建议使用自带的
与matplotlib不太一样
视频
vc = cv2.VideoCapture('xxx.mp4')
检查是否打开正确
if vc.isOpened():
open,frame = vc.read() 从视频流中一帧一帧读取,如果读取成功,open为true
else:
open =False
while open:
ret,frame = vc.read() 有多少帧就读取多少
if frame is None:
break
if ret == True:
gray = cv2.cvColor(frame, cv.COLOR_BGR2GRAY)
cv2.imshow('reslut',gray)
if cv2.waitKey(10) & 0xFF ==27: 每处理完一帧就等着
break
vc.release()
cv2.destroyAllwindwos()
这段代码常用于处理视频流,它可以实现显示视频过程中键盘响应的功能。
具体来说,cv2.waitKey()函数与cv2.imshow()函数结合使用时,可以实现不断刷新图像,即形成视频流的效果。而在这个过程中,程序会等待指定的时间,也就是cv2.waitKey()函数的参数,等待用户按下键盘上的某个键。
在这里,if cv2.waitKey(1) & 0xFF == 27: 表示如果用户按下ESC键(ASCII码值为27),则退出循环,结束程序的运行。其中,cv2.waitKey(1)函数会等待1毫秒并检查是否有键盘输入,如果没有,则返回-1,并继续执行后面的程序。如果用户按下了键盘上的某个键,则返回该键的ASCII码值,与0xFF(11111111)进行位与(&)运算提取其最低8位,这样就可以保证获取到正确的ASCII码值,以便进行键盘响应的判断。
vc.release()是OpenCV中用于释放视频文件或摄像头占用的资源的函数。它的作用是停止视频流的捕获,并释放相关的系统资源。
在调用cv2.VideoCapture()函数打开视频文件或启动摄像头进行视频流捕获时,会占用一些系统资源,如文件句柄、缓存等。在结束视频流捕获后,如果不及时释放这些资源,就会导致资源泄漏或系统不稳定等问题。
因此,在完成视频处理任务后,通常需要调用vc.release()函数来显式释放视频资源,以确保程序安全退出并避免占用过多的系统资源。
gray = cv2.cvColor(frame, cv.COLOR_BGR2GRAY)
这个函数是OpenCV中用于将彩色图像转换为灰度图像的函数。其原理是基于人眼的对比度感知机制,计算出图像三个通道(BGR)之间的加权平均值,从而减小图像的维度并去除颜色信息。常用的方法是将红、绿、蓝三个通道的像素值进行不同程度的加权求和,得到一个新的像素值作为灰度图像中的像素值。在这里,cv2.COLOR_BGR2GRAY表示将图像从BGR色彩空间转换为灰度空间。因此,使用cv2.cvColor函数可以将输入的frame图像转换成对应的灰度图像gray。
在OpenCV中,将彩色图像转换成灰度图像的过程中,通常采用下面的加权方式计算像素点的灰度值:
gray_value = 0.299 * R + 0.587 * G + 0.114 * B
其中,R、G、B分别表示像素点的红、绿、蓝三个通道的像素值。
除了采用默认的加权方式外,OpenCV还提供了其他的加权方式,如等权重(gray_value = (R + G + B)/3)、平均法(gray_value = (max(R, G, B) + min(R, G, B))/2)等。
另外,灰度图像的阈值通常根据实际需求而定,OpenCV中也提供了不同的阈值处理函数,如cv2.threshold()、cv2.adaptiveThreshold()等,可以根据具体应用场景选择不同的算法和阈值进行处理。
在OpenCV中,将彩色图像转换为灰度图像时,通常使用8位无符号整数(unsigned char)表示每个像素点的灰度值,它的取值范围是0~255。
因此,对于一幅灰度图像,它的每个像素点的灰度值都是介于0和255之间的一个整数。这些灰度值可以用来表示图像中不同区域的亮度差异和纹理信息等特征,常用于图像处理、计算机视觉、机器学习等领域。
ROI
截取部分图像数据
cat = img[0:50,0:200] 直接截取图像
b,g,r = cv2.split(img) 颜色通道
img = cv2.merge((b,g,r))
B G R 只保留一个通道
img[:,:,0] = 0
边界填充
设置旁边扩充的大小
外包装法按一定固定顺序往外扩充
常数填充要给一个常数,这里给了0
数值计算
img1 = img +10 所有值都加上10
img[:5,:,0]
(img1 + img2)[:55,:,0] 数值超过255 会 xx%256
cv2.add(img1,img2)[] 数值越界了会取255
图像融合
img_dog = cv2.resize(img_dog,(500,414)) 前两个维度 最后一个维度3不变
img_dog = cv2.resize(img_dog,(0,0),fx=3,fy=1) 纵向变为了三分之一
权重公式+偏移
res = cv2.addWeighted(img,0.4,img2, 0.6, 0)