可以做软件的网站有哪些功能,php 做网站xml地图,c2c模式,免费网站商城模板一、学习目标
了解opencv中图像的逻辑运算了解opencv中逻辑运算的应用
目录
[python opencv 计算机视觉零基础到实战] 一、opencv的helloworld
[【python opencv 计算机视觉零基础到实战】二、 opencv文件格式与摄像头读取] 一、opencv的helloworld
[[python opencv 计算机…一、学习目标
了解opencv中图像的逻辑运算了解opencv中逻辑运算的应用
目录
[python opencv 计算机视觉零基础到实战] 一、opencv的helloworld
[【python opencv 计算机视觉零基础到实战】二、 opencv文件格式与摄像头读取] 一、opencv的helloworld
[[python opencv 计算机视觉零基础到实战] 三、numpy与图像编辑] 一、opencv的helloworld
[[python opencv 计算机视觉零基础到实战] 四、了解色彩空间及其详解] 一、opencv的helloworld
[[python opencv 计算机视觉零基础到实战] 五、对象追踪] 一、opencv的helloworld [python opencv 计算机视觉零基础到实战] 六、图像运算
如有错误欢迎指出~
二、了解OpenCV中图像运算的运用
2.1 了解and逻辑运算
在上一节中我们了解了基本的图像运算这一节将了解在opencv将两张图片进行逻辑运算。逻辑运算在编程中较为常见的一种基本运算在此不在进行赘述。我们首先了解一下opencv中的逻辑与运算opencv中逻辑与运算与我们基本的逻辑与运算一致也就是1 and 1为11 and 0 为0。我们可以通过一个小示例来直观的感受opencv的and运算方式。
在opencv中对两个图片进行逻辑与运算需要使用bitwise_and方法。bitwise_and方法接收2个图片数组为参数。首先我们读取2个图片1bit与1bit3。
import cv2img1 cv2.imread(rC:\Users\mx\Desktop\1bit.jpg)
img3 cv2.imread(rC:\Users\mx\Desktop\1bit3.jpg)cv2.imshow(img1, img1)
cv2.imshow(img3, img3)cv2.waitKey (0)
cv2.destroyAllWindows()得到两张图片如下 随后使用bitwise_and方法对两张图片进行运算
import cv2img1 cv2.imread(rC:\Users\mx\Desktop\1bit.jpg)
img3 cv2.imread(rC:\Users\mx\Desktop\1bit3.jpg)
and_imgcv2.bitwise_and(img3,img1)
cv2.namedWindow(and_img,cv2.WINDOW_NORMAL)cv2.imshow(img1, img1)
cv2.imshow(img3, img3)
cv2.imshow(and_img, and_img)cv2.waitKey (0)
cv2.destroyAllWindows()以上代码中关键代码为and_imgcv2.bitwise_and(img3,img1)在这一串代码中对img3与img1进行了逻辑与运算。由于img1图片只有“我是1_bit”文字为白色其他区域为黑色我们可以当成“我偶是1_bit”这个内容区域的值为1然后黑色区域位置为0。这时黑色区域与img3图片的通道区域值进行计算那就是0与一个内容值进行逻辑与计算那么结果为0img1的文字部分值为1与img3图片相同的位置进行逻辑与计算那么保留结果。这时运算后的图片则应该是生成一张带有“我是1_bit”字样的图片并且在字样区域内带有img3图片内容。结果如下 那将图片img1改成如下情况呢
这时“我是1_bit”’字样区域的内容将会与另一张图片计算后排出这时结果将会产生一个0值的空缺部分由于空白部分的值为1逻辑运算后将会保留白色区域的另外一张图片内容。
结果如下
2.2 了解or逻辑运算
在opencv中既然存在and逻辑与那么逻辑或大几率存在是可能的。在opencv中逻辑或运算与逻辑与运算相反使用bitwise_or方法传入参数也是两张用于逻辑计算的图片。使用示例如下
import cv2img1 cv2.imread(rC:\Users\mx\Desktop\1bit.jpg)
img3 cv2.imread(rC:\Users\mx\Desktop\1bit3.jpg)
and_imgcv2.bitwise_or(img3,img1)
cv2.namedWindow(and_img,cv2.WINDOW_NORMAL)cv2.imshow(img1, img1)
cv2.imshow(img3, img3)
cv2.imshow(and_img, and_img)cv2.waitKey (0)
cv2.destroyAllWindows()结果如下 以上使用的图片与2.1示例中图片一致。逻辑或运算只要不都为0则是1。图片img1中字体为白其它部分为0但由于进行逻辑运算时黑色部分进行计算的区域对应img3是有内容的也就是说img3中该部分的内容非0。那么结果就是img3中的图片内容最终将会得到如上结果。
2.3 了解取反运算
取反运算非常简单就是黑的边白白的变黑当然这样说不严谨但是却很好反应了取反这个操作的结果例如0取反则是11取反则是0。取反使用bitwise_not方法bitwise_not方法接收一个图片参数。以下方法依旧使用名为1bit的图片。图片为了方便查看在代码中显示了原图内容。
import cv2img1 cv2.imread(rC:\Users\mx\Desktop\1bit.jpg)
not_imgcv2.bitwise_not(img1)
cv2.imshow(img1 , img1 )
cv2.imshow(not_img, not_img)
cv2.waitKey (0)
cv2.destroyAllWindows()结果如下
2.4 逻辑运算有什么用呢
我们在前两节中的值可以通过inRange方法提取图片中的指定颜色内容但是提取出来后将会得到一个黑白图片那么如何对改图片进行颜色的还原呢想必有些同学学完逻辑运算后觉得应该是找到了方法。是的我们可以通过逻辑运算对图片进行颜色上的还原。因为我们提取出来的图片是黑白图片提取出来指定颜色内容的区域为白色那么只需要将图片与原图进行and运算那么重合的部分就会显示出来这个时候就可以还原提取后图片的颜色。但是我们是哪个颜色提取出来的图片是单通道的灰度图片怎么办呢不急首先我们把之前的代码贴上方便查看
import cv2
import numpy as npcapturecv2.VideoCapture(rC:\Users\mx\Desktop\hmbb.mp4)
minnp.array([26,43,46])
maxnp.array([34,255,255])
while True:r,imgcapture.read()if rFalse:breakhsv_imgcv2.cvtColor(img,cv2.COLOR_BGR2HSV)flagcv2.inRange(hsv_img,lowerbmin,upperbmax)cv2.imshow(flag, flag)cv2.imshow(hmbb, img)kcv2.waitKey (40)if k27:break
cv2.destroyAllWindows()以上代码已经在前两节“对象跟踪”小节讲解那么现在只需要对提取到的图片与原图进行一个and逻辑运算即可添加以下代码
cflagcv2.bitwise_and(img,img,maskflag)以上代码bitwise_and添加了两个相同的img参数为什么添加呢不急下一节将会告诉大家。我们现在着重查看mask参数mask参数赋值为提取到的flag目标区域的图片表示遮罩。将会在之前传入的img中剔除不要的区域只保留白色的区域传入的类型是8位单通道的灰度图像。这时我们就可以将flag值赋值给maskbitwise_and将会从img图片中做逻辑运算去除我们不需要的黑色区域的图片内容这时将会得到一个颜色比较正常的海绵宝宝。完整代码如下
import cv2
import numpy as npcapturecv2.VideoCapture(rC:\Users\mx\Desktop\hmbb.mp4)
img1 cv2.imread(rC:\Users\mx\Desktop\1bit.jpg)
minnp.array([26,43,46])
maxnp.array([34,255,255])
while True:r,imgcapture.read()if rFalse:breakhsv_imgcv2.cvtColor(img,cv2.COLOR_BGR2HSV)flagcv2.inRange(hsv_img,lowerbmin,upperbmax)cflagcv2.bitwise_and(img,img,maskflag)cv2.imshow(flag, flag)cv2.imshow(hmbb, img)cv2.imshow(cflag, cflag)kcv2.waitKey (40)if k27:break
cv2.destroyAllWindows()结果如下 逻辑运算的更多内容下一节将会讲解。 该系列文章首发于ebaina
三、总结
了解了opencv中对图像进行逻辑与运算使用bitwise_and方法了解了opencv中对图像进行逻辑或运算使用bitwise_or方法了解了opencv中对图像进行取反运算使用bitwise_not方法了解了and方法的其他用途用于mask遮罩剔除不需要的内容