为什么MATLAB的imclose和opencvpython的MORPH_CLOSE显示不同的输出?

2024-04-26 00:57:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将一些MATLAB代码转换为Python代码,这些代码与一些图像处理相关

当我在MATLAB中用7的圆盘形状做imclose时,原始二值图像中的洞被填满了,看起来不错。但是当我用一个内核大小为7的椭圆对同一个二值图像进行MORPH_CLOSE时,这个洞并没有闭合。为什么会这样

这是MATLAB代码:

cmask = imread('image.jpeg');
cm = imclose(im2bw(cmask),strel('disk',7));

这是我的Python代码,对应于上面的MATLAB代码:

import cv2 as cv
cmask=cv.imread('image.jpeg')
gray = cv2.cvtColor(cmask, cv2.COLOR_BGR2GRAY)

_,bwcmask = cv2.threshold(gray, 127,255, cv2.THRESH_BINARY)
kernel_7=cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(7,7))
cm = cv2.morphologyEx(bwcmask, cv2.MORPH_CLOSE, kernel_7)

这是我的输入图像:

This is my input image

这是我的MATLAB输出图像:

This is my MATLAB output image

这是我的Python输出图像:

This is my python output image

这是python中内核大小为11的输出图像

This is the output image with kernel size 11 in python

为什么MATLAB和Python中的输出不同,即使步骤相同?我想要Python代码中没有孔的输出图像(不改变对象的形状)。内核大小超过10可以填补这个漏洞,但它改变了我原来的图像形状


Tags: 代码图像imageclosecmcv2内核jpeg