OpenCV基本操作汇总

导入模块

import cv2 #opencv读取的格式是BGR
import matplotlib.pyplot as plt
import numpy as np 
%matplotlib inline 

数据读取-图像

  • cv2.IMREAD_COLOR:彩色图像 –
  • cv2.IMREAD_GRAYSCALE:灰度图像
  • 需注意:opencv默认读取的图像是BGR格式,matplot读取的图像是RGB格式
img=cv2.imread('cat.jpg',cv2.IMREAD_COLOR) #cv2.IMREAD_COLOR可省略
img=cv2.imread('cat.jpg',cv2.IMREAD_GRAYSCALE) #读取灰度图像

#定义图像显示函数
def cv_show(name,img):
    cv2.imshow(name,img) 
    cv2.waitKey(0)  #cv2.waitKey(k),表示等待k 毫秒后窗口消失,k=0时表示按任意键终止
    cv2.destroyAllWindows()

img.shape
cv2.imwrite('picname',img)
img.size
img.dtype

数据读取-视频

vc=cv2.videoCapture('test.mp4')  #cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备,例如0,1。如果是视频文件,直接指定好路径即可。
if vc.isOpened():
	open,frame=vc.read() #每执行一次vc.read,读取一帧
else
	open=False

while open:
	ret,frame=vc.read()
	if frame is None:
		break
	if ret==True:
		gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)  # #cvtColor(1,2),其中1是要转换的图片,2是要转换成的格式
		cv2.imshow('result',gray)
		if cv2.waitKey(100)&0xFF==27:
		break
vc.release()
cv2.destroyAllWindows()

截取部分图像数据

img=imread('cat.jpg')
cat=img[0:50,0:200]
cv_show('cat',cat)

颜色通道提取

b,g,r=cv2.split(img)

边界填充

  • BORDER_REPLICATE:复制法,也就是复制最边缘像素。
  • BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb
  • BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba
  • BORDER_WRAP:外包装法cdefgh|abcdefgh|abcdefg
  • BORDER_CONSTANT:常量法,常数值填充。
top_size,bottom_size,left_size,right_size = (50,50,50,50)

replicate = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_WRAP)
constant = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_CONSTANT, value=0)

图像融合

#把图像大小改成一样
img_dog=cv2.revise(img,(412,412))
res = cv2.addWeighted(img_cat,0.4,img_dog,0.4,0)  #res=αX+βY+b
res = cv2.resize(img, (0, 0), fx=4, fy=4)

图像阈值

  • ret, dst = cv2.threshold(src, thresh, maxval, type)
  • src:输入图,只能输入单通道图像,通常来说为灰度图
  • dst: 输出图
  • thresh:阈值
  • maxval:当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值
  • type:二值化操作的类型,包含以下5种类型:
    cv2.THRESH_BINARY:超过阈值部分取maxval(最大值),否则取0 cv2.THRESH_BINARY_INV THRESH_BINARY的反转
    cv2.THRESH_TRUNC 大于阈值部分设为阈值,否则不变
    cv2.THRESH_TOZERO 大于阈值部分不改变,否则设为0
    cv2.THRESH_TOZERO_INV THRESH_TOZERO的反转

猜你喜欢

转载自blog.csdn.net/qq_41073715/article/details/104689078