我有python上的代码,我在其中打开一个图像并在其上设置掩码:
import cv2
import numpy as np
img1 = np.zeros((250, 500, 3), np.uint8)
img1 = cv2.rectangle(img1,(200, 0), (300, 100), (255, 255, 255), -1)
img2 = cv2.imread("blackie.jpg")
bitAnd = cv2.bitwise_and(img2, img1)
bitOr = cv2.bitwise_or(img2, img1)
bitXor = cv2.bitwise_xor(img1, img2)
bitNot1 = cv2.bitwise_not(img1)
bitNot2 = cv2.bitwise_not(img2)
cv2.imshow("img1", img1)
cv2.imshow("img2", img2)
cv2.imshow('bitAnd', bitAnd)
cv2.imshow('bitOr', bitOr)
cv2.imshow('bitXor', bitXor)
cv2.imshow('bitNot1', bitNot1)
cv2.imshow('bitNot2', bitNot2)
cv2.waitKey(0)
cv2.destroyAllWindows()
当我尝试按位图像时,这给了我错误:
error: OpenCV(4.5.2) C:UsersrunneradminAppDataLocalTemppip-req-build-ttbyx0jzopencvmodulescoresrcarithm.cpp:214: error: (-209:Sizes of input arguments do not match) The operation is neither 'array op array' (where arrays have the same size and type), nor 'array op scalar', nor 'scalar op array' in function 'cv::binary_op'
@craclanddie是对的,您可以使用以下代码:
import cv2
import numpy as np
import sys
img2 = cv2.imread("blackie.jpg")
img1 = np.zeros(img2.shape, np.uint8)
if img2.shape[0] > 200 or img2.shape[1] > 300:
print("Bounding box is bigger then target image")
sys.exit(0)
img1 = cv2.rectangle(img1,(200, 0), (300, 100), (255, 255, 255), -1)
bitAnd = cv2.bitwise_and(img2, img1)
bitOr = cv2.bitwise_or(img2, img1)
bitXor = cv2.bitwise_xor(img1, img2)
bitNot1 = cv2.bitwise_not(img1)
bitNot2 = cv2.bitwise_not(img2)
cv2.imshow("img1", img1)
cv2.imshow("img2", img2)
cv2.imshow('bitAnd', bitAnd)
cv2.imshow('bitOr', bitOr)
cv2.imshow('bitXor', bitXor)
cv2.imshow('bitNot1', bitNot1)
cv2.imshow('bitNot2', bitNot2)
cv2.waitKey(0)
cv2.destroyAllWindows()