按位与操作返回黑色图像
假设我们有一张这样的图片:
我想对这张图片进行一些位运算,所以我尝试了以下这个遮罩:
import cv2
import matplotlib.pyplot as plt
import numpy as np
image1 =cv2.imread("ML.png")
image1 =cv2.resize(image1,(400,400))
print(image1)
mask =np.zeros((400,400,3),dtype='uint8')
mask[0:50,0:120]=1
mask[70:180,130:320] =1
mask[150:240,190:390] =1
print(mask)
image1_changed =cv2.bitwise_and(image1,mask)
print(image1_changed)
plt.imshow(np.uint8(image1_changed))
plt.show()
其实我想保留头部的部分,把其他的都去掉,这里有所有的矩阵:
[[[255 250 245]
[255 250 245]
[255 250 245]
...
[255 250 245]
[255 250 245]
[255 250 245]]
[[255 250 245]
[255 250 245]
[255 250 245]
...
[255 250 245]
[255 250 245]
[255 250 245]]
[[255 250 245]
[255 250 245]
[255 250 245]
...
[255 250 245]
[255 250 245]
[255 250 245]]
...
[[255 250 245]
[255 250 245]
[255 250 245]
...
[255 250 245]
[255 250 245]
[255 250 245]]
[[255 250 245]
[255 250 245]
[255 250 245]
...
[255 250 245]
[255 250 245]
[255 250 245]]
[[255 250 245]
[255 250 245]
[255 250 245]
...
[255 250 245]
[255 250 245]
[255 250 245]]]
[[[1 1 1]
[1 1 1]
[1 1 1]
...
[0 0 0]
[0 0 0]
[0 0 0]]
[[1 1 1]
[1 1 1]
[1 1 1]
...
[0 0 0]
[0 0 0]
[0 0 0]]
[[1 1 1]
[1 1 1]
[1 1 1]
...
[0 0 0]
[0 0 0]
[0 0 0]]
...
[[0 0 0]
[0 0 0]
[0 0 0]
...
[0 0 0]
[0 0 0]
[0 0 0]]
[[0 0 0]
[0 0 0]
[0 0 0]
...
[0 0 0]
[0 0 0]
[0 0 0]]
[[0 0 0]
[0 0 0]
[0 0 0]
...
[0 0 0]
[0 0 0]
[0 0 0]]]
[[[1 0 1]
[1 0 1]
[1 0 1]
...
[0 0 0]
[0 0 0]
[0 0 0]]
[[1 0 1]
[1 0 1]
[1 0 1]
...
[0 0 0]
[0 0 0]
[0 0 0]]
[[1 0 1]
[1 0 1]
[1 0 1]
...
[0 0 0]
[0 0 0]
[0 0 0]]
...
[[0 0 0]
[0 0 0]
[0 0 0]
...
[0 0 0]
[0 0 0]
[0 0 0]]
[[0 0 0]
[0 0 0]
[0 0 0]
...
[0 0 0]
[0 0 0]
[0 0 0]]
[[0 0 0]
[0 0 0]
[0 0 0]
...
[0 0 0]
[0 0 0]
[0 0 0]]]
那么怎么才能定义好这样的矩阵呢?之前的代码返回的是一张黑色的图片,请帮帮我。
1 个回答
1
根据我的理解,你需要保留头部(脑袋)部分,把其他的去掉。你可以通过从原始图片中选择一些点来创建一个遮罩,把这些点的值设为255。注意,你把这个值设为1,这样的话就不太明显,因为它接近黑色(接近0)。下面的代码有注释来解释,希望这能帮到你。
import cv2
import numpy as np
#Read image
image = cv2.imread('ML.png')
#Create mask as same as image size.
mask =np.zeros((image.shape[0],image.shape[1],1),dtype='uint8')
#Mask rectangle is selected as points from original image.
mask[30:240,57:168]=255
#Resize image and mask
image1 =cv2.resize(image,(400,400))
mask1 = cv2.resize(mask,(400,400))
#Do bitwise and
image1_changed =cv2.bitwise_and(image1,image1, mask=mask1)
#Save mask and masked image result.
cv2.imwrite("mask.png",mask1)
cv2.imwrite("changed.png",image1_changed)
输出文件为 'changed.png'。
