gpt4 book ai didi

python - OpenCV Python 中的距离变换自动将 CV_8UC3 转换为 CV_32SC1,从而产生断言错误

转载 作者:太空宇宙 更新时间:2023-11-03 21:13:45 27 4
gpt4 key购买 nike

我正尝试按照教程将 WaterShed 算法应用于图像:OpenCv WaterShed Docs .我早些时候在灰度图像上应用了高斯滤波和形态学变换后的 Otsu 阈值,以根据代码提高图像质量:

img = cv2.imread('Results\Feb_16-0.jpg',0)
kernel = np.ones((1,1),np.uint8)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
blur = cv2.GaussianBlur(opening,(1,1),0)
ret3,th4 = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

根据代码应用距离变换作为分水岭算法的第一阶段:

# sure background area
sure_bg = cv2.dilate(opening,kernel,iterations=1)
# Finding sure foreground area
dist_transform = cv2.distanceTransform(opening,cv2.DIST_L2,3)

产生错误:

error: (-215) src.type() == CV_8UC3 && dst.type() == CV_32SC1 in function cv::watershed

其中正在尝试将 8 位 3 channel 图像转换为 32 位单 channel 图像。我如何防止这种情况发生并使用距离变换?

最佳答案

当您输入到 cv2.distanceTransform 中的数组格式不正确时,会出现此错误。它应该是 np.uint8 类型的二维数组(不是 int8)。

例如

import cv2 as cv
import numpy as np

testim = np.zeros((11,11), dtype = uint8)
testim[2:6,1:6] = 255
testim[3,3] = 0
print(testim)
dist = cv.distanceTransform(testim, cv.DIST_L2, 5)
print(testim)

如果您正在读取格式不正确的图像,则必须先将其转换为灰色(只有一个 channel )并确保其为 uint8 格式。这可以通过 imagename.astype(np.uint8)

完成

这是在 opencv 版本 3.3.1,python 3.5 中测试的。

关于python - OpenCV Python 中的距离变换自动将 CV_8UC3 转换为 CV_32SC1,从而产生断言错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38241511/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com