我正在尝试将bwareaopen函数转换为OpenCV C++ ...
我找到了此代码,但无法正常工作。
因此,如果有人解决了这个问题并可以为我提供帮助,我将非常高兴。
void removeSmallBlobs(cv::Mat& im, double size)
{
// Only accept CV_8UC1
if (im.channels() != 1 || im.type() != CV_8U)
return;
// Find all contours
std::vector<std::vector<cv::Point> > contours;
cv::findContours(im.clone(), contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
for (int i = 0; i < contours.size(); i++)
{
// Calculate contour area
double area = cv::contourArea(contours[i]);
// Remove small objects by drawing the contour with black color
if (area > 0 && area <= size)
cv::drawContours(im, contours, i, CV_RGB(0, 0, 0), -1);
}
}
最佳答案
我认为您需要打开形态操作。 Here you can see an example。
或在这里看看:How to filter small segments from image in OpenCV?
关于c++ - OpenCV C++如何编写与Matlab的bwareaopen函数相同的函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23826953/