gpt4 book ai didi

c++ - cv::Erode error with binary cv::mat

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:50:15 26 4
gpt4 key购买 nike

所以我正在尝试腐 eclipse 二进制矩阵。我使用此代码创建矩阵:

cv::Mat tmp = cv::Mat::zeros( IMG->width, IMG->height, CV_8U );

for( auto i = 0 ; i < IMG->width ; i++)
{
for ( auto j = 0 ; j < IMG->height ; j++)
{
if( cv::pointPolygonTest(cv::Mat(contour),cv::Point(i,j),true) < 0 )
{
tmp.at<double>(i,j) = 255;
}
}

}

这是我使用的源图片:

http://snag.gy/ZZzhw.jpg

这就是我在循环中得到的(它是 tmp 矩阵):

http://snag.gy/lhuR7.jpg

所以在我尝试使用这段代码腐 eclipse 图片之后:

int erosion_elem = 1;
int erosion_size = 8;


int erosion_type;
if( erosion_elem == 0 ){ erosion_type = MORPH_RECT; }
else if( erosion_elem == 1 ){ erosion_type = MORPH_CROSS; }
else if( erosion_elem == 2) { erosion_type = MORPH_ELLIPSE; }

Mat element = getStructuringElement( erosion_type,
Size( 2*erosion_size + 1, 2*erosion_size+1 ),
Point( erosion_size, erosion_size ) );

/// Apply the erosion operation
erode( binary, erosion_dst, element );`

所以它编译得很好,但我在这一行得到了一个异常(exception):

erode( binary, erosion_dst, element );`

它说这是一个不受支持的数据类型。有谁知道我为什么会收到此异常?

我试图改变矩阵 tmp 的数据类型,但我有同样的错误。

感谢您的帮助!

最佳答案

您的二进制图像像素存储为 unsigned char(CV_8U -> on 8bits -> 1 byte),您也应该将像素值存储为 unsigned char

cv::Mat tmp = cv::Mat::zeros( IMG->width, IMG->height, CV_8U );

for( auto i = 0 ; i < IMG->width ; i++)
{
for ( auto j = 0 ; j < IMG->height ; j++)
{
if( cv::pointPolygonTest(cv::Mat(contour),cv::Point(i,j),true) < 0 )
{
tmp.at<unsigned char>(i,j) = 255;
}
}

}

(根据评论做出回答)

关于c++ - cv::Erode error with binary cv::mat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17083719/

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