初识OpenCV简单操作,图片的读取和显示以及BGR与RGB之间的转换,读取视频。解决报错iCCP: cHRM chunk does not match sRGB
pip install opencv-python
cv2.imread(filename,[flags])参数:
filename:表示读取图像的文件名;flags:是可选参数,表示读取图像的方式。
cv2.imread()有两个参数,第一个参数filename是图片路径,第二个参数flag表示图片读取模式,共有三种:
cv2.IMREAD_COLOR:加载彩色图片,这个是默认参数,可以直接写1。
cv2.IMREAD_GRAYSCALE:以灰度模式加载图片,可以直接写0。
cv2.IMREAD_UNCHANGED:包括alpha(包括透明度通道),可以直接写-1
cv2.imshow(winname,img)参数:
winname:表示显示窗口的名字;img:表示显示的图像。
第一个参数为文件名称,第二个参数为要显示的图片
cv2.split函数分离得到各个通道的灰度值(单通道图像)。
cv2.merge函数是合并单通道成多通道(不能合并多个多通道图像)
cv2.waitKey(time)参数:
time表示等待的时间,单位是毫秒;
0表示一直等待。
如果少了就无法看到显示的图片,作用是一直等待,直到有按键按下,才会销毁创建的界面
用来删除窗口的,()里不指定任何参数,则删除所有窗口,删除特定的窗口,往()输入特定的窗口值
将图片由BGR转换为RGB
import cv2 #引入库
img = cv2.imread('D:\opencvdata\lena.jpg') # bgr D:\opencvdata\lena.jpg为需要读取图片的路径
cv2.imshow('img1',img)#第一个参数为窗口名称,第二个参数为要显示的图片
cv2.waitKey(0)#少了就无法看到显示的图片,作用是一直等待,直到有按键按下,才会销毁创建的界面
cv2.destroyAllWindows()
import cv2
img = cv2.imread('D:\opencvdata\lena.jpg',0) # bgr
img2 = cv2.imread(r'D:\opencvdata\noise.png',1)
cv2.imshow('img1',img)
cv2.imshow('img2',img2)
cv2.waitKey(0)
cv2.destroyAllWindows()
从这里可以看到imread()函数第二个参数为0时显示灰色,为1时显示彩色。
另外
img2 = cv2.imread(r’D:\opencvdata\noise.png’,1)
可以看到图片路径有个r这是因为出现了\n转义字符,加上r就是原始路径!
我们再用matplotlib.pyplot 显示一下
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('D:\opencvdata\lena.jpg') # bgr
plt.imshow(img) #rgb
plt.show()
可以看到这里图片为蓝色,变成阿凡达了!
这是因为cv2.imread(‘D:\opencvdata\lena.jpg’) 读取的三个信道为bgr
而plt.imshow(img) 显示的三个信道为rgb
所以要正确显示要将BGR转换为RGB!
import cv2
img = cv2.imread('D:\opencvdata\lena.jpg',1)
print(img.shape)
输出结果为:(350,500,3)
从中可以看出这是一个高350宽500(350x500),信道为3的图片
print(img.size)
输出结果为:525000,即像素为(350x500x3)525000
print(img.dtype)
输出结果为:uint8
那么我们可以将通道拆分,输出单通道
import cv2
img = cv2.imread('D:\opencvdata\lena.jpg',1)
cv2.imshow('img',img)
b,r,g = cv2.split(img)
cv2.imshow('b',b)
cv2.imshow('r',r)
cv2.imshow('g',g)
cv2.waitKey(0)
cv2.destroyAllWindows()
可以看到三个单通道图片的亮度不同
img = img[:,:,::-1]
cv2.imread(‘D:\opencvdata\lena.jpg’)读取为三维数组最后一个维度为三个信道的数组,所以将这个数组倒序即可
这样BGR就转换为RGB!
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('D:\opencvdata\lena.jpg') # bgr
img = img[:,:,::-1]
plt.imshow(img) #rgb
plt.show()
b,g,r = cv2.split(img)
通道拆分
img = cv2.merge([r,g,b])
通道合并
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('D:\opencvdata\lena.jpg') # bgr
b,g,r = cv2.split(img)
img = cv2.merge([r,g,b])
plt.imshow(img) #rgb
plt.show()
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('D:\opencvdata\lena.jpg') # bgr
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
plt.imshow(img) #rgb
plt.show()
保存图像的一个单通道图像
import cv2
img = cv2.imread('D:\opencvdata\lena.jpg',1)
cv2.imshow('img',img)
b,g,r = cv2.split(img)
cv2.imwrite('r.jpg',r)
cv2.waitKey(0)
cv2.destroyAllWindows()
函数: capture = cv2.VideoCapture(path)
参数:可以是电脑自带摄你头0,1,2;
视频地址;网络摄像头。
函数: ret, frame = capture.read()
说明: ret:读取成功则返,True,读取失败返回Falseframe:每一帧图像
cap.release() # 释放资源
cv2.destroyAllWindows()
import cv2
cap = cv2.VideoCapture(0)
if cap.isOpened():
print("捕获成功")
while True:
ret,frame = cap.read()
if ret:
cv2.imshow('video',frame)
if cv2.waitKey(5) ==27:
break
else:
break
else:
print("捕获失败")
cap.release() # 释放资源
cv2.destroyAllWindows()
#读取视频
import cv2
path = r'D:\opencvdata\car.mp4'
cap = cv2.VideoCapture(path)
if cap.isOpened():
print("捕获成功")
while True:
ret,frame = cap.read()
if ret:
cv2.imshow('video',frame)
if cv2.waitKey(5) ==27:
break
else:
break
else:
print("捕获失败")
cap.release() # 释放资源
cv2.destroyAllWindows()
import cv2
rtsp = r'rtsp://admin:[email protected]'
cap = cv2.VideoCapture(rtsp)
if cap.isOpened():
print("捕获成功")
while True:
ret,frame = cap.read()
if ret:
cv2.imshow('video',frame)
if cv2.waitKey(5) ==27:
break
else:
break
else:
print("捕获失败")
cap.release() # 释放资源
cv2.destroyAllWindows()
第一节课初识OpenCV简单操作,了解了图片的读取和显示以及BGR与RGB之间的转换,以及读取视频和摄像头
报错:libpng warning: iCCP: cHRM chunk does not match sRGB
解决方案:因为我使用的是QQ输入法,在运行代码时切换为电脑自带的输入法即可。
Cannot find reference 'imread' in '__init__.py' more
虽然不影响结果,但是缺少代码提示十分不方便,也尝试了许多方法,例如降低版本
pip install -i https://pypi.douban.com/simple opencv-python==4.5.4.62
安装增强版
pip install opencv-contrib-python
安装虚拟环境等都未解决
最终
先卸载
pip uninstall opencv-python
再次安装
pip install opencv-python
就好了
可能每个人的情况都不同,多试几种就好了