功能无法正常工作(OpenCV Python)

时间:2014-07-22 17:27:34

标签: python opencv image-processing computer-vision image-segmentation

我遇到以下代码的问题:

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')。脚本应显示图像的分段部分。我怎么解决这个问题 ?在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

128 mask的{​​{1}}阈值不一定有效。由于replace函数将返回仅包含两个可能值的矩阵,请尝试以下方法:

segmentation

之后其他一切看起来都很好。