我正试图在粗面粉中隔离小物体(黑色物体),如下图所示。我在C ++中使用OpenCV 3.1。
我尝试了不同的方法,我发现的最好的方法如下。但结果并不像我想的那样好。 我只想在决赛中使用黑色物体。
因此,我将图像转换为灰度,并应用GaussianBlur和大模糊以获得背景。
GaussianBlur(img_gray, img_inter, Size(21, 21), 0, 0);
blur(img_inter, img_blur, Size(51, 51), Point(-1,-1), 0);
之后,我将背景减去原始图像:
打开操作后的最终图像,阈值再次打开:
以下代码:
cvtColor(*img_in, img_gray, CV_BayerGB2GRAY);
GaussianBlur(img_gray, img_inter, Size(21, 21), 0, 0);
blur(img_inter, img_blur, Size(51, 51), Point(-1,-1), 0);
img = (255 - img_gray) - (255 - img_blur); // Background subtraction
morphologyEx(img, img_inter, cv::MORPH_OPEN, cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(3, 3)),Point(-1,-1), 1);
threshold(img_inter, img, 50, 255, CV_THRESH_BINARY);
morphologyEx(img, img_inter, cv::MORPH_OPEN, cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(3, 3)), Point(-1, -1), 1);
如果您有任何改善结果的想法,谢谢