opencv python学习笔记(五)图像的算术与

来源:互联网 发布:apk软件破解论坛 编辑:程序博客网 时间:2024/06/18 10:05

数值都可以进行加减乘除等算术运算以及与或非等逻辑运算,同样的,图像也可以进行这些运算,最简单的,我们可以直接为整个图像某一通道的像素值进行简单的加减法,下面我们逐个展开描述一下。

1、加法

import cv2import numpy as npx = np.uint8([245])y = np.uint8([25])print(cv2.add(x,y))print(x+y)

这里我们可以通过cv2.add()来进行相加,不过如果用此方法时,若结果大于255,则输出255而不会输出真正的结果,而如果采用直接相加的方法,得到的结果若大于255,则会将结果对255取余,两次的输出结果如下:

[[255]]
[14]

除了最基本的加法,我们还可以对两幅图像按权相加,使得两幅图像按照一定的比例混合,代码如下:

import cv2import numpy as npimg1=cv2.imread('images/add1.jpg')img2=cv2.imread('images/add2.jpg')dst=cv2.addWeighted(img1,0.3,img2,0.7,0)cv2.imshow('dst',dst)cv2.waitKey(0)
这里主要是用到了cv2.addWeighted()这个函数,要注意的是两幅图像的权重之和要为1


2、逻辑运算


import cv2import numpy as npimg1=cv2.imread('images/opencvw.png')img2=cv2.imread('images/test.jpg')rows,cols,channels=img1.shaperio=img2[0:rows,0:cols]imggray=cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)
#第一步:先将logo图像灰度化
mask_inv=cv2.bitwise_not(imggray)
#这里,由于logo图像原本为白底,为了方便后面的操作,我们对此图像的所有像素值进行非操作,使得图像变为黑底白字
ret,mask=cv2.threshold(mask_inv,10,255,cv2.THRESH_BINARY)
#然后用threshold将转化后的图片二值化,这里的第二个参数阈值要取到合适的值,否则会出现转换后的图像内容显示不全的问题
maskinv=cv2.bitwise_not(mask)
#再将二值化后的图像进行非操作,使其转化为白底黑字img1_fg=cv2.bitwise_and(rio,rio,mask=maskinv)
#我们将rio部分的图像与自身以二值化后的图像为掩码进行与运算,0与任何数相与都为0,所以通过这一步,我们可以将黑色logo显示在主图的左上角部分img2_fg = cv2.bitwise_and(img1,img1,mask = mask)
#将rio部分与自己以mask为掩码进行与运算,因为mask图像经过上面的转换是一幅黑底白字的图像,除背景之外其余的内容均不为零,所以经过与运算可以为logo上色dst=cv2.add(img1_fg,img2_fg)
#将两幅图片相加即可得到带主图背景以及logo颜色的rio大小的图片img2[0:rows,0:cols]=dst
#最后,将得到的图片复制到主图的对应位置,再将整合后的图片显示出来,大功告成!cv2.imshow('ss',img2)cv2.waitKey(0)


阅读全文
0 0
原创粉丝点击