Image Pixel Operation(Logical Operation)的代码注释:
import cv2 as cv
import numpy as np
# create image one
src1 = np.zeros(shape=[400, 400, 3], dtype=np.uint8)
#创建了一个大小为400*400的3通道图像,赋值为0,所以产生了一个512*512的黑色图像
src1[100:200, 100:200, :] = 255
#将图片中长的100-200像素和宽的100-200像素部分指定为255,所以经过转换后m2图片中出现了一块黄色色的方块。
#[100:200, 100:200, ]为白色,[100:200, 100:200, 1]为黄色,[100:200, 100:200, 2]为红色
#黄色和红色通道相加为黄色
src1[100:200, 100:200, 2] = 255
cv.imshow("input1", src1)
# create image two
src2 = np.zeros(shape=[400, 400, 3], dtype=np.uint8)
src2[150:250, 150:250, 2] = 255
#[100:200, 100:200, 2]是红色
cv.imshow("input2", src2)
dst1 = cv.bitwise_and(src1, src2)
dst2 = cv.bitwise_xor(src1, src2)
dst3 = cv.bitwise_or(src1, src2)
# cv.bitwise_and(参数1, 参数2):逻辑与
# cv.bitwise_xor(参数1, 参数2):逻辑异或
# cv.bitwise_or(参数1, 参数2):逻辑或
# cv.bitwise_not(参数):图像值取反操作
cv.imshow("dst1", dst1)
cv.imshow("dst2", dst2)
cv.imshow("dst3", dst3)
src = cv.imread("dataset/train/test1.png")
cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
cv.imshow("input", src)
dst = cv.bitwise_not(src)
cv.imshow("dst", dst)
cv.waitKey(0)
cv.destroyAllWindows()
运行结果:
若把代码修改为:
src1[100:200, 100:200, 1] = 255
src1[100:200, 100:200, 2] = 255
结果为:
src1[100:200, 100:200, 0] = 255
src1[100:200, 100:200, 2] = 255
src1[100:200, 100:200, 1] = 255
src1[100:200, 100:200, 2] = 255
src2[150:250, 150:250, 1] = 255
src1[100:200, 100:200, 1] = 255
src1[100:200, 100:200, 2] = 255
src2[150:250, 150:250, :] = 255
src1[100:200, 100:200, 1] = 255
src1[100:200, 100:200, 2] = 255
src2[150:250, 150:250, 0] = 255
src1[100:200, 100:200, :] = 255
src1[100:200, 100:200, 2] = 255
src2[150:250, 150:250, :] = 255
总结:
逻辑与操作:白色和红色与为红色
黄色与红色与为红色,等等
逻辑异或: 白和红为青色
黄和红为绿色,等等
逻辑或: 看不懂
图像值取反:红取反是青色,绿色取反是紫色,蓝色取反是黄色,看不懂。