Я не пробовал делать это с интерфейсом C, но вот как я это сделал, используя интерфейс C ++:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <vector>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char* argv[])
{
Mat spots = imread("roi.png", 0);
Rect ulRoi(0, 0, spots.cols >> 1, spots.rows >> 1);
Mat opening(spots, ulRoi);
Mat element = getStructuringElement(MORPH_RECT, Size(7, 7));
morphologyEx(opening, opening, MORPH_OPEN, element);
imshow("opening", opening);
imshow("spots", spots);
waitKey();
return 0;
}
Я в основном только что придумал изображение, а потом только избавился от "шумового" ореола в верхнем левом квадранте. Мои «шумовые» пятна были только 5х5, поэтому я сделал морфологическое ядро 7х7, чтобы стереть шум.
Вот входное изображение:
После морфологического открытия я получаю следующее:
Надеюсь, это вам поможет!