import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np
def cv_show(name,img):
cv.imshow(name,img)
print(img)#输出各像素点
print(img.shape)#输出h,w,c
print(type(img))#输出格式
print(img.size)#像素点的个数
print(img.dtype)#数据类型
cv.waitKey(0)
cv.destroyAllWindows()
def cv_show1(name,vc):
#检查打开是否正确
if vc.isOpened():
open,frame=vc.read()#第一个参数为True,第二个是这一帧的图像(三维数组)
else:
open=False
while open:
ret,frame=vc.read()
if frame is False:
break
if ret==True:
gray=cv.cvtColor(frame,cv.COLOR_BGR2GRAY)#把每一帧转换为灰度图
cv.imshow(name,gray)
#waitKey(1)你的计算机处理速度有多快就有多块
if cv.waitKey(10)&0xFF=='q':#图片等待的时间
break
vc.release()
cv.destroyAllWindows()
def cut_show(name,img):
img1=img[300:500,100:500]
cv_show(name,img1)
def cv_merge(b,g,r):
#合并颜色通道
img=cv.merge((b,g,r))
print(img.shape)
def cv_split(img):
b,g,r=cv.split(img)#颜色通道提取
print(b)
print(r)
print(b.shape)
print(r.shape)
cv_merge(b,g,r)
def cv_two(img):
#只保留R通道
img2=img.copy()
img2[:,:,0]=0
img2[:,:,1]=0
cv_show('R',img2)
def cv_one(img):
#只保留G通道
img2=img.copy()
img2[:,:,0]=0
img2[:,:,2]=0
cv_show('G',img2)
def cv_zero(img):
#只保留B通道
img2=img.copy()
img2[:,:,1]=0
img2[:,:,2]=0
cv_show('B',img2)
def cv_padding(img):
top,bottom,left,right=(50,50,50,50)
#复制法,复制最边缘像素
replicate=cv.copyMakeBorder(img,top,bottom,left,right,cv.BORDER_REPLICATE)
cv_show('replicate',replicate)
#反射法,fedcba|abcdefgh|hgfedcb
reflect=cv.copyMakeBorder(img,top,bottom,left,right,cv.BORDER_REFLECT)
cv_show('reflect',reflect)
#反射法,gfedcb|abcdefgh|gfedcba
reflect101=cv.copyMakeBorder(img,top,bottom,left,right,cv.BORDER_REFLECT_101)
cv_show('reflect101',reflect101)
#外包装法,cdefgh|abcdefgh|abcdefg
wrap=cv.copyMakeBorder(img,top,bottom,left,right,cv.BORDER_WRAP)
cv_show('wrap',wrap)
#常量法,拿常数值进行填充
constant=cv.copyMakeBorder(img,top,bottom,left,right,cv.BORDER_CONSTANT,0)
cv_show('constant',constant)
def cv_count(img):
img2=img+10
cv_show('img2',img2)
#像素相加,如果越界(0,255),例如294,则会自动做取余操作,294%256=38,故为38
cv_show('img+img2',img2+img)
#如果越界则取最大值,否则取自身
img3=cv.add(img,img2)
cv_show('img3',img3)
def cv_add(img1,img2):
#如果想让两个图片相加,直接相加shape值可能不同,就比如两个不同型的矩阵无法相加
img2=cv.resize(img2,(1200,787))#将img2的大小改为(1200,787)
res=cv.resize(img2,(0,0),fx=1.5,fy=1)#将img2按一定比例放大缩小
res2=cv.addWeighted(img1,0.4,img2,0.6,0)#z=x1*a+x2*b
cv_show('res2',res2)
cv_show('res',res)
cv_show('img1+img2',img1+img2)
img=cv.imread('D://z.png')#读取图像
img2=cv.imread('D://f.png')
#cv_show('1',img)
#cv_split(img)
#cv_zero(img)
#cv_padding(img)
#cv_count(img)
cv_add(img,img2)
img=cv.imread('D://z.png',cv.IMREAD_GRAYSCALE)#读取灰度图
#cv_show('1',img)
vc=cv.VideoCapture('D://t.mp4')
#cv_show1('t',vc)
#cut_show('2',img)#截取图像
cv.imwrite('D://z1.png',img)#保存图像
基于python的opencv项目实战笔记(一)—— 图像基本操作
最新推荐文章于 2022-05-26 15:12:59 发布