0


Opencv学习笔记——你需要掌握的操作

家人们春节快乐

昨夜星辰昨夜梦,今日许愿今日圆,日出东方曙光现,
幸福就在你身边,福星高照艳阳天,欢声笑语乐心田,
良辰好景庆新年,岁岁年年送祝愿,新年到了,
祝你在新的一年里事事顺利,快乐每一天。

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.总结

好了,今天我就分享到这里,祝大家新年快乐!!!!!!!


本文转载自: https://blog.csdn.net/bang___bang_/article/details/122763717
版权归原作者 bang___bang_ 所有, 如有侵权,请联系我们删除。

“Opencv学习笔记&mdash;&mdash;你需要掌握的操作”的评论:

还没有评论