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

Posted bang___bang_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Opencv学习笔记——你需要掌握的操作相关的知识,希望对你有一定的参考价值。

家人们春节快乐

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

目录

1.图像基本操作

1.1基本函数

1.1.1——cv2.imread()

 1.1.2——cv2.imshow()

1.1.3——cv2.imwrite()

2.1绘制直线

2.2绘制圆形

2.3向图像中添加文字

 2.图像通道的拆分与合并

 3.色彩空间的改变

 4.视频的读取

 5.总结


1.图像基本操作

导包

import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np


1.1基本函数

1.1.1——cv2.imread()

#读取图片
cv.imread()

参数:

  • 要读取的图像
  • 读取方式的标志
    • cv.IMREAD*COLOR:以彩色模式加载图像,任何图像的透明度都将被忽略。这是默认参数。
    • cv.IMREAD*GRAYSCALE:以灰度模式加载图像
    • 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.总结

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

以上是关于Opencv学习笔记——你需要掌握的操作的主要内容,如果未能解决你的问题,请参考以下文章

初学opencv c++学习笔记透视变换--warpPerspective()

Opencv学习笔记——基础知识

OpenCV3学习笔记整理(二期)

Opencv学习笔记--图像处理的基本操作

[OpenCV学习笔记2][Mat数据类型和操作]

OpenCV学习笔记——形态学梯度操作