去除二值图像图像中面积较大较小部分 opencv
不废话直接上代码
/*****************************************************************************
* 功能:
* 输入二值图像,去除较大或较小面积面积(利用轮廓的大小),返回结果
* 参数:
* src: 输入灰度图像
* AreaLargerLimit: 去除阈值
* AreaSmallerLimit: 去除阈值
******************************************************************************/
cv::Mat removeLargerSmallerRegion(cv::Mat src, int AreaSmallerLimit, int AreaLargerLimit)
{
std::vector<std::vector<cv::Point>> contours;
std::vector<cv::Vec4i> hierarchy;
cv::Mat mask = cv::Mat::zeros(src.rows, src.cols, CV_8UC1);
findContours(src, contours, hierarchy, cv::RETR_TREE, cv::CHAIN_APPROX_SIMPLE, cv::Point(0, 0));
for (int i = 0; i < contours.size(); i++)
{
int areasValue = contourArea(contours[i], false);
if (areasValue <= AreaLargerLimit && areasValue >= AreaSmallerLimit)
{
cv::Scalar color = cv::Scalar(255, 255, 255);
drawContours(mask, contours, i, color, CV_FILLED, 8, hierarchy, 0, cv::Point(0, 0));
}
}
return mask;
}