我遇到以下代码的问题:
import cv2
import numpy as np
img = cv2.imread('img.JPG', 0)
def segmentation(image):
kernel1 = np.ones((3,3), np.float32)/-9.0
kernel1[1][1] = 8.0/9.0
filteredImg = cv2.filter2D(image.astype(np.float32), -1, kernel1)
mrg = cv2.addWeighted(filteredImg.astype(np.float32), 0.9, image.astype(np.float32), 0.1, -20.0)
retval, th = cv2.threshold(mrg, 1, 10, cv2.THRESH_BINARY_INV)
kernel2 = np.ones((3,3), np.uint8)
opening = cv2.morphologyEx(th, cv2.MORPH_OPEN, kernel2, iterations = 2)
sure_bg = cv2.dilate(opening, kernel2, iterations = 5)
return sure_bg
def replace(original, mask):
mask[mask < 128] = 0
mask[mask > 128] = 1
outputImg = original * (mask == 0)
outputImg[mask == 1] = 255
cv2.imshow('output', outputImg)
replace(img, segmentation(img))
cv2.waitKey(0)
cv2.destroyAllWindows()
问题是每当我运行代码时,我总是得到原始图像(在本例中为'img')。脚本应显示图像的分段部分。我怎么解决这个问题 ?在此先感谢您的帮助。
答案 0 :(得分:1)
128
mask
的{{1}}阈值不一定有效。由于replace
函数将返回仅包含两个可能值的矩阵,请尝试以下方法:
segmentation
之后其他一切看起来都很好。