家人们春节快乐
昨夜星辰昨夜梦,今日许愿今日圆,日出东方曙光现,
幸福就在你身边,福星高照艳阳天,欢声笑语乐心田,
良辰好景庆新年,岁岁年年送祝愿,新年到了,
祝你在新的一年里事事顺利,快乐每一天。
1.图像基本操作
导包
import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np
1.1基本函数
1.1.1——cv2.imread()
#读取图片
cv.imread()
参数:
- 要读取的图像
- 读取方式的标志 - cv.IMREADCOLOR:以彩色模式加载图像,任何图像的透明度都将被忽略。这是默认参数。- cv.IMREADGRAYSCALE:以灰度模式加载图像- cv.IMREAD_UNCHANGED:包括alpha通道的加载图像模式。
可以使用1、0、-1来代替上面三个标志
例如:
#以灰度图的形式读取图像
img=cv.imread(r"图片路径",0)
说说图片路径在哪找:首先把图片放入你的Pycharm项目文件夹中,然后右键你需要用的图片点击Copy Path再点击Absolute Path再Ctrl+v在参数图片路径处即可,参数前加r是为了保障字符串中\能正常识别。
1.1.2——cv2.imshow()
#展示图片
cv.imshow("image",img)
cv.waitKey(0)
cv.destroyAllwindows()
cv2.imshow的第一个参数为设置的图像名称,第二个参数则为要显示的图像,显示后要跟waitKey()函数,这里设置0则为按任意键退出,destroyAllwindows()删除窗口。
具体看cv2.waitKey的入门级理解_山上有强强的博客-CSDN博客_cv2.waitkey这位大佬的讲解
1.1.3——cv2.imwrite()
cv.imwrite("图像名称",img)
第一个参数:"图像名称“为你存入项目图片的设置的名称,第二个参数:img为图像。
2.1绘制直线
cv.line(img,start,end,color,thickness)
参数:
- img:要绘制直线的图像
- Start,end:直线的起点和终点
- color:线条的颜色
- Thickness:线条宽度
2.2绘制圆形
cv.circle(img,centerpoint,r,color,thickness)
参数:
- img:要绘制矩形的图像
- Leftupper,rightdown:矩形的左上角和右下角坐标
- color:线条的颜色
- Thickness:线条宽度
2.3向图像中添加文字
cv.putText(img,text,station,font,fontsize,color,thickness,cv.LINE_AA)
参数:
- img:图像
- text:要写入的文本数据
- station:文本的放置位置
- font:字体
- Fontsize:字体大小
# 1.创建一个空白的图像
img=np.zeros((512,512,3),np.uint8)
# 2.绘制图形
cv.line(img,(0,0),(511,511),(255,0,0),5)
cv.rectangle(img,(100,100),(420,420),(0,255,0),3)
cv.circle(img,(256,256),100,(0,0,255),-1)
cv.putText(img,'OpenCV',(10,500),cv.FONT_HERSHEY_SIMPLEX,4,(255,255,255),2)
# 3.图像显示
plt.imshow(img[:,:,::-1]) #bgr格式显示
plt.rcParams["font.sans-serif"]="SimSun" #设置字体格式
plt.title('匹配结果') #设置显示框标题
plt.show()
2.图像通道的拆分与合并
有时在B、G、R通道图像上单独工作。在这种情况下,需要将BGR图像分割为单个通道。或者在其他情况下,可能需要将这些单独的通道合并到BGR图像。你可以通过以下方式完成。
#通道拆分
b,g,r=cv.split(img)
#通道合并
img=cv.merge((b,g,r))
例子(省略图片读取操作):
#拆分3通道
b,g,r=cv.split(img)
res=np.hstack((b,g,r))
cv.imshow("res",res)
cv.waitKey(0)
cv.destroyAllWindows()
#合并3通道
img2=cv.merge((b,g,r))
plt.imshow(img2[:,:,::-1])
plt.show()
由于是单通道,像素值是0-255,灰度图像形式表现
这里再说一种为了呈现单色图片,则只需将其他的颜色通道都置0,B、G、R通道分别对应维度表示0、1、2。例如:若想要显示为红色图片,则我们只需关注R通道像素的亮度值,而忽略其他颜色通道的像素值。用切片方式分将忽略的通道赋0即可。代码如下:
#拆分3通道
#只保留R
R=img1.copy() #复制副本
R[:,:,0]=0
R[:,:,1]=0
#只保留B
B=img1.copy()
B[:,:,1]=0
B[:,:,2]=0
#只保留G
G=img1.copy()
G[:,:,0]=0
G[:,:,2]=0
res=np.hstack((B,G,R))
cv.imshow("res",res)
cv.waitKey(0)
cv.destroyAllWindows()
这里我换了一张图片
3.色彩空间的改变
OpenCV中有150多种颜色空间转换方法。最广泛使用的转换方法有两种,BGR<——>Gray和BGR<——>HSV。
cv.cvtColor(input_image,flag)
参数:
- input_image:进行颜色空间转换的图像
- flag:转换类型 - cv.COLOR_BGR2GRAY:BGR<——>Gray- cv.COLOR_BGR2HSV:BGR——>HSV
例子:
# 转化为灰度图
Gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
cv.imshow("Gray",Gray)
cv.waitKey(0)
cv.destroyAllWindows()
#转化为hsv图
Hsv=cv.cvtColor(img,cv.COLOR_BGR2HSV)
cv.imshow("HSV",Hsv)
cv.waitKey(0)
cv.destroyAllWindows()
4.视频的读取
- cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备,例如0,1
- 如果是视频文件,直接指定好路径即可。
#读取视频
vc=cv.VideoCapture(r"视频的绝对路径")
#检查是否打开
if vc.isOpened():
open,frame=vc.read()
else:
open=False
#读取文件,ret返回Ture,frame为每一帧
#遍历每一帧
while open:
ret,frame=vc.read()
if frame is None:
break
if ret==True:
#转化灰度帧图
gray=cv.cvtColor(frame,cv.COLOR_BGR2GRAY)
cv.imshow("result",gray)
#播放速度10,视频结束退出,或者按Esc退出
if cv.waitKey(10)& 0xFF ==27:
break
#释放视频
vc.release()
#结束展示画面
cv.destroyAllWindows()
视频的路径选择和上面讲到图片的路径寻找方式相同。
5.总结
好了,今天我就分享到这里,祝大家新年快乐!!!!!!!
版权归原作者 bang___bang_ 所有, 如有侵权,请联系我们删除。