OpenCV学习

图像显示

def cv_show(name,img):
	#图像的显示,也可以创建多个窗口
	cv2.imshow(name,img)
	#等待时间,毫秒级,0表示任意键终止
	cv2.waitKey(0)
	cv2.destoryAllWindows()
	#保存
	cv2.imwrite('iamgeName.png',img)

	img.shape   #显示图片的宽高和颜色通道(666,888,3)
	img.size	#图片的大小
	img.dtype	#数据类型

数据读取–视频

vc=cv2.VideCapture('test.mp4')
#检查是否正确打开
if vc.isOpened():
	open,frame=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)
		cv2.imshow('result',gray)
		if cv2.waitKey(10)&0xFF==27:#图片的时间
			break
vc.release()
cv2.destoryAllWindows()

截取部分图像数据

img=cv2.imread('image.jpg')
cat=img[0:200,0:200]#选择0到200的区域
cv.show('cat',cat)

颜色通道提取

b,g,r=cv2.split(img)#blue,green,red


img=cv2.merge((b,g,r))
img.shape

#只保留R
cur_img=img.cpy()
cur_img[:,:,0]=0
cur_img[:,:,1]=0
cv_show('R',cur_img)


#只保留G
cur_img=img.cpy()
cur_img[:,:,0]=0
cur_img[:,:,2]=0
cv_show('G',cur_img)

#只保留B
cur_img=img.cpy()
cur_img[:,:,1]=0
cur_img[:,:,2]=0
cv_show('B',cur_img)





边界填充

top_size,botm_size,left_size,right_size=(50,50,50,50)#上下左右填充的范围
replicate=cv2.copyMakeBorder(img,top_size,botm_size,left_size,right_size,borderType=cv2.BORDER_REPLICATE)#复制法
reflect=cv2.copyMakeBorder(img,top_size,botm_size,left_size,right_size,cv2.BORDER_REFLECT)#反射法,对感兴趣中的像素在两边进行复制
reflect01=cv2.copyMakeBorder(img,top_size,botm_size,left_size,right_size,cv2.BORDER_REFLECT_101)#反射法,以最边缘像素为轴
wrap=cv2.copyMakeBorder(img,top_size,botm_size,left_size,right_size,cv2.BORDER_WRAP)#外包装法
constant=cv2.copyMakeBorder(img,top_size,botm_size,left_size,right_size,cv2.BORDER_CONSTANT,value=0)#常量法

数值计算

img_a=cv2.read('a.jpg')
img_b=cv2.read('b.jpg')

img_a2=img_a+10#所有的像素都+10

#相当于%256  
(img_a+imga2)[:5,:,0]#前提两个维度相等


CV2.add(img_a,img_a2)[:5,:,0]#如果大于255就显示成为255

图像融合

#首先要求两个图像的大小是一样的
cv2.resize(img_a,size(img_b))
res=cv2.addWeighted(img_a,0.4,img_b,0.6,0)
#上面的权重就是img_a*0.4+img_b*0.6+0
#res=cv2.resize(img,(0,0),fx=1,fy=3)#长高
#res=cv2.resize(img,(0,0),fx=3,fy=1)#拉宽
plt.imhow(res)

形态学-腐蚀操作

img=cv2.imread('test01.jpg')#读入图片
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destoryAllWindows()

kernel=np.ones((5,5),np.unit8)#迭代范围
erosion=cv2.erode(img,kernel,iteration=1)#后面那个是腐蚀迭代次数
cv2.imshow('erosion',erosion)
cv2.waitKey(0)
cv2.destoryAllWindows()



膨胀操作

#和上面的操作相反
img=cv2.imread('test01.jpg')#读入图片
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destoryAllWindows()

kernel=np.ones((3,3),np.unit8)#迭代范围
dige_dilate=cv2.dilate(img,kernel,iteration=1)#后面那个是迭代次数
cv2.imshow('dilate',dige_dilate)
cv2.waitKey(0)
cv2.destoryAllWindows()

开运算与闭运算

#开运算		先腐蚀再膨胀
img=cv2.imread('test01.jpg')#读入图片
kernel=np.ones((3,3),np.unit8)#迭代范围
opening=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
cv2.imshow('opening',opening)
cv2.waitKey(0)
cv2.destoryAllWindows()

#闭运算		先膨胀再腐蚀
img=cv2.imread('test01.jpg')#读入图片
kernel=np.ones((3,3),np.unit8)#迭代范围
closing=cv2.morphologyEx(img,cv2.MORPH_close,kernel)
cv2.imshow('closing',closing)
cv2.waitKey(0)
cv2.destoryAllWindows()


梯度运算

#梯度==膨胀-腐蚀
img=cv2.imread('test01.jpg')#读入图片
kernel=np.ones((3,3),np.unit8)#迭代范围
dige_dilate=cv2.dilate(img,kernel,iteration=5)#后面那个是迭代次数
erosion=cv2.erode(img,kernel,iteration=5)#后面那个是腐蚀迭代次数

res=np.hstack((dige_dilate,erosion))

cv2.imshow('res',res)
cv2.waitKey(0)
cv2.destoryAllWindows()


gradient=cv2.morphologyEx(img,cv2.MORPH_gradient,kernel)
cv2.imshow('gradient',gradient)
cv2.waitKey(0)
cv2.destoryAllWindows()

礼帽与黑帽

# 礼帽=原始输入-开运算结果
#黑帽=闭运算-原始输入

#礼帽
img=cv2.imread('test01.jpg')#读入图片
kernel=np.ones((3,3),np.unit8)#迭代范围
tophat=cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)
cv2.imshow('tophat',tophat)
cv2.waitKey(0)
cv2.destoryAllWindows()



#黑帽
img=cv2.imread('test01.jpg')#读入图片
kernel=np.ones((3,3),np.unit8)#迭代范围
blackhat=cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)
cv2.imshow('blackhat',blackhat)
cv2.waitKey(0)
cv2.destoryAllWindows()















你可能感兴趣的:(opencv,人工智能,计算机视觉)