opencv的图像基本运算

1.相加

  • x+y
  • cv2.add(x,y)
def add(self):
   x=np.uint8([250])
   y=np.uint8([10])
   print(cv2.add(x,y))#260=>255
   print(x+y)#260%256=4
   plt.subplot(131), plt.title('raw'), plt.imshow(self.img,'gray'),plt.xticks([]), plt.yticks([])
   plt.subplot(132),plt.title('numpy'),plt.imshow(self.img+self.img,'gray'),plt.xticks([]), plt.yticks([])
   plt.subplot(133), plt.title('add'), plt.imshow(cv2.add(self.img,self.img),'gray'),plt.xticks([]), plt.yticks([])
   plt.show()

在这里插入图片描述

2.混合

  • cv2.addWeighted(x,0.5,y,0.5,0)
def blend(self):
	#两张图片的shape要相同
	img1=cv2.cvtColor(self.img,cv2.COLOR_BGR2RGB)
	img2 = cv2.cvtColor(cv2.imread('images/test2.jpg'),cv2.COLOR_BGR2RGB)
	dst=cv2.addWeighted(self.img,0.5,img2,0.5,0)#alpha,beta,gamma是混合参数
	dst1=cv2.cvtColor(dst,cv2.COLOR_BGR2RGB)
	plt.subplot(131), plt.title('raw1'), plt.imshow(img1), plt.xticks([]), plt.yticks([])
	plt.subplot(132), plt.title('raw2'), plt.imshow(img2), plt.xticks([]), plt.yticks([])
	plt.subplot(133), plt.title('blend'), plt.imshow(dst1), plt.xticks([]), plt.yticks([])
	plt.show()

在这里插入图片描述

3.位运算

  • cv2.bitwise_not()
  • cv2.bitwise_and()
  • OR/XOR

我想把OpenCV 的标志放到另一幅图像上。如果我使用加法,颜色会改
变,如果使用混合,会得到透明效果,但是我不想要透明。如果他是矩形我可
以象上一章那样使用ROI。但是他不是矩形。但是我们可以通过下面的按位运
算实现:

 def bit_compute(self):
     img1=self.img
     img2=cv2.imread('images/logo.png')
     #让img2添加到img1上
     rows,cols,channels=img2.shape
     roi=img1[0:rows,0:cols]#在img上选取img2那么大的区域
     #创建mask
     img2gray=cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
     ret,mask=cv2.threshold(img2gray,175,255,cv2.THRESH_BINARY)
     mask_inv=cv2.bitwise_not(mask)

     img1_bg=cv2.bitwise_and(roi,roi,mask=mask)
     img2_fg=cv2.bitwise_and(img2,img2,mask=mask_inv)

     dst=cv2.add(img1_bg,img2_fg)
     img1[0:rows,0:cols]=dst
     img1=cv2.cvtColor(img1,cv2.COLOR_BGR2RGB)
     plt.subplot(121), plt.title('img2'), plt.imshow(img2), plt.xticks([]), plt.yticks([])
     plt.subplot(122), plt.title('add'), plt.imshow(img1), plt.xticks([]), plt.yticks([])
     plt.show()

在这里插入图片描述

发布了132 篇原创文章 · 获赞 40 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq_36622009/article/details/104527814