【发布时间】:2018-03-02 18:59:27
【问题描述】:
我正在尝试手动屏蔽图像,以便仅显示图像的圆形区域。我试图通过指定圆的中心和半径来实现这一点——从中心到图像中每个像素的距离,如果该距离大于半径,我将该像素变为黑色。
我的输入图像全为白色(用于测试目的),大小为 6000x4000 像素。 中心为 (3224,2032),半径为 1810 像素。
处理后,我得到了这个遮罩很差的图像
这里,蓝色圆圈是我预计不会改变的区域:Expected Result
发生了什么事??
编辑:我切换了 xMax 和 yMax 的索引。改变产生了这个结果
import cv2
def mask (img, Xcenter, Ycenter, radius):
radius2 = float(radius**2.00)
Xcenter = float(Xcenter)
Ycenter = float(Ycenter)
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
imgSize = img.shape
xMax = imgSize[0]
yMax = imgSize[1]
print("Drawing mask...")
for y in range(1,yMax):
for x in range(1,xMax):
dist2 = int(((x - Xcenter)**2 + (y - Ycenter)**2))
try:
if dist2 >= radius2:
img[x, y] = 0
except IndexError:
pass
#print ("Index error: X = ", x, " Y = ", y)
#char = input("Press enter to continue")
cv2.imwrite("maskedImg.tif", img)
print("Completed mask.")
return img
【问题讨论】: