opencv学习(一)图像的基本操作
创始人
2024-05-29 09:28:14
0
  1. 数据的读取

  • cv2.IMREAD_COLOR:彩色图像

  • cv2.IMREAD_GRAYSCALE:灰度图像

import cv2 
img = cv2.imread('E:/opencv/open-cv/2-7/cat.jpg',1)cv2.imshow("img", img)
cv2.waitKey(0)    
cv2.destroyAllWindows() 
  • cv2.imread()读取图片,当括号里面是1时,也就是替代了cv2.IMREAD_COLOR,得到彩色图。

  • cv2.imread()读取图片,当括号里面是0时,替代了cv2.IMREAD_GRAYSCALE,得到灰度图。

  • cv.inshow()函数为创建一个展示窗口,括号里面分别为图片名字和读取哪个图片。

  • cv2.waitKey(0) 等待时间多久,其中括号中0表示任意键可以中止显示图片。

  • cv2.destroyAllWindows() 关闭窗口。

2.opencv图片颜色转换

import cv2 
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline img=cv2.imread('E:/opencv/open-cv/2-7/cat.jpg')
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow("img_gray", img_gray)
cv2.waitKey(0)    
cv2.destroyAllWindows() 
  • 由于cv2读取的图像格式为BGR,而Matplotlib画的是RGB,因此需要对格式进行转换。

cv2.COLOR_BGR2GRAY转化成灰度图,cv2.COLOR_BGR2RGB转换成RGB图,cv2.COLOR_BGR2HSV转换成HSV图。

其中HSV分别表示如下,转换图片也如下图所示:

  • H - 色调

  • S - 饱和度

  • V值(强度)

3.图像保存

cv2.inwrite('cat.png',img_gray)
img_gray.type()
  • 只需要输入cv2.inwrite()函数即可保存图像。

  • img_gray.type()可以查看数据类型

4.视频图像的读取

vc = cv2.VideoCapture('E:/opencv/open-cv/2-7/test.mp4')
  • cv2.VideoCapture()函数用来捕捉摄像头,控制不同的设备。

if vc.isOpened():open, frame =vc.read()
else:open = False
print(frame)
  • 检查视频是否读取错误,其中open只有两个值要么True,要么是False;frame为读取一帧一帧的值。

while open:ret, frame = vc.read()#print(ret)if frame is None:breakif ret == True:gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)cv2.imshow('result',gray)if cv2.waitKey(20)& 0xFF==27:breakvc.release()    
cv2.destroyAllWindows()
  • 其中cv2.waitKey(20)& 0xFF==27,这句就是如果期间有按键按下返回的值就是按下按键的ASCII值,就比如esc键的ASCII值是27,cv2.waitKey(20) & 0xFF==27就是当按下按键是esc的时候返回true。0xFF意思是16进制的FF也就是八位2进制数1111 1111,如果引入& 0xFF==27 那么得出的结果永远是后八位,这样就可以排除其他按键的干扰。

  • vc.release() 释放硬件资源。

5.截取图像操作

import cv2 
img = cv2.imread('E:/opencv/open-cv/2-7/dog.jpg',1)
dog = img[0:200,0:200]
cv2.imshow("img", dog)
cv2.waitKey(0)    
cv2.destroyAllWindows() 

截取狗狗图像对比如下:

原始狗狗图像

截取的狗狗图像

6.提取颜色通道

  • 其中一张图片b,g,r的shape值是一样的。利用cv2.merge((b,g,r))函数是可以重构图像颜色通道。

b,g,r = cv2.split(img)
  • 只保留一个通道。b,g,r分别代号为0,1,2,下面保留r通道。

img1 = img.copy()
img1[:,:,0]=0
img1[:,:,1]=0
cv2.imshow('r',img1)

只保留R通道

7.图像边界填充

#边界填充
top_size, bottom_size, left_size, right_size = (50, 50, 50, 50)replicate = cv.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv.BORDER_REPLICATE)
reflect = cv.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv.BORDER_REFLECT)
reflect_101 = cv.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv.BORDER_REFLECT_101)
wrap = cv.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv.BORDER_WRAP)
constant = cv.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv.BORDER_CONSTANT)#绘制子图
plt.subplot(231), plt.imshow(img, 'gray'), plt.title('ORIGINAL')
plt.subplot(232), plt.imshow(replicate, 'gray'), plt.title("REPLICATE")
plt.subplot(233), plt.imshow(reflect, 'gray'), plt.title('REFLECT')
plt.subplot(234), plt.imshow(reflect_101, 'gray'), plt.title("REFLECT_101")
plt.subplot(235), plt.imshow(wrap, 'gray'), plt.title('WRAP')
plt.subplot(236), plt.imshow(constant, 'gray'), plt.title("CONSTANT")plt.show()
  • borderType:图像填充的方法。

  • BORDER_REPLICATE:复制法,也就是复制最边缘像素。

  • BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制

  • BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称。

  • BORDER_WRAP:外包装法。

  • BORDER_CONSTANT:常量法,常数值填充,需要在设置一个value值,已显示填充的颜色。

展示图如下:

相关内容

热门资讯

中证A500ETF摩根(560... 8月22日,截止午间收盘,中证A500ETF摩根(560530)涨1.19%,报1.106元,成交额...
A500ETF易方达(1593... 8月22日,截止午间收盘,A500ETF易方达(159361)涨1.28%,报1.104元,成交额1...
何小鹏斥资约2.5亿港元增持小... 每经记者|孙磊    每经编辑|裴健如 8月21日晚间,小鹏汽车发布公告称,公司联...
中证500ETF基金(1593... 8月22日,截止午间收盘,中证500ETF基金(159337)涨0.94%,报1.509元,成交额2...
中证A500ETF华安(159... 8月22日,截止午间收盘,中证A500ETF华安(159359)涨1.15%,报1.139元,成交额...
科创AIETF(588790)... 8月22日,截止午间收盘,科创AIETF(588790)涨4.83%,报0.760元,成交额6.98...
创业板50ETF嘉实(1593... 8月22日,截止午间收盘,创业板50ETF嘉实(159373)涨2.61%,报1.296元,成交额1...
港股异动丨航空股大幅走低 中国... 港股航空股大幅下跌,其中,中国国航跌近7%表现最弱,中国东方航空跌近5%,中国南方航空跌超3%,美兰...
电网设备ETF(159326)... 8月22日,截止午间收盘,电网设备ETF(159326)跌0.25%,报1.198元,成交额409....
红利ETF国企(530880)... 8月22日,截止午间收盘,红利ETF国企(530880)跌0.67%,报1.034元,成交额29.0...