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

本文介绍了OpenCV库中用于图像基本操作的函数,如cv2.imread(), cv2.imshow()和cv2.imwrite(),并展示了如何在图像上绘制直线、圆形和添加文字。还探讨了图像通道的拆分与合并以及色彩空间从BGR到灰度和HSV的转换。最后,简述了如何使用cv2.VideoCapture读取视频。通过实例代码,帮助读者更好地理解和应用OpenCV进行图像处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

家人们春节快乐

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

目录

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的入门级理解_山上有强强的博客-优快云博客_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.总结

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

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值