python-opencv 图像的算术运算与逻辑运算
图像的运算
首先进行算术运算前我们要保证两张图片的像素一致,电脑自带的画图就能完成。
由于第二张图片太白了效果不是很好,所以就把这张图片的像素值都减去128.得到下面的图片
算术运算:加减乘除
add_demo = cv.add(ig,color)
subtract_demo = cv.subtract(ig,color)
multiply_demo = cv.multiply(ig,color)
divide_demo = cv.divide(ig,color)
opencv自带的函数非常好理解,函数名就能描述出我们要做的操作。我们把每一种操作都封装成一个函数。如下:
def divide_demo(ig,color):
divide_demo = cv.divide(ig,color)
cv.imwrite('divide_demo.jpg',divide_demo)
cv.namedWindow("divide_demo",cv.WINDOW_NORMAL)
cv.imshow("divide_demo",divide_demo)
return divide_demo
逻辑运算:与或非 异或
and_demo = cv.bitwise_and(ig,color)
or_demo = cv.bitwise_or(ig,color)
not_demo = cv.bitwise_not(ig)
xor_demo = cv.bitwise_xor(ig,color)
同上,也同样封装好。得到最终结果:
总结
是不是很炫酷,需要注意的是cv.*() 存在饱和机制,也就是说所有值超过255就保存为255,所有的值小于0就保存为0.如图add_demo,图片IG白色部分在执行加操作之后都是白色,图像subtract_demo黑色部分在执行减操作之后也都是黑色的,有兴趣同学可以试试numpy.add,是舍弃溢出值的机制,效果和cv.add不同。
代码
https://github.com/Clayygou/python-opencv/tree/master/Pixel_operations
参考文献
同上