Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- uchar vals[9] = {0, 1, 0,
- 1, 1, 1,
- 0, 1, 0}
- Mat defElStruct(3,3,CV_8UC1, vals);
- Mat dilate(Mat src, Mat strEl = defElStruct) {
- int h = strEl.rows/2;
- int w = strEl.cols/2;
- Mat dst = src.clone();
- for (int i=h; i< src.rows-h; i++)
- for(int j=w; j < src.cols-w; j++)
- if(src.at<uchar>(i,j) == 0)
- for(int ii=-h; ii< h; ii++) //iterate through the structural element
- for(int jj=-w; jj<w; jj++)
- if (strEl.at<uchar>(ii+h, jj+w) == 1)
- dst.at<uchar>(i+ii, j+jj) = 0;
- return dst;
- }
- Mat erode(Mat src, Mat strEl = defElStruct) {
- int h = strEl.rows/2;
- int w = strEl.cols/2;
- bool k;
- Mat dst = src.clone();
- for (int i=h; i< src.rows-h; i++)
- for(int j=w; j < src.cols-w; j++)
- if(src.at<uchar>(i,j) == 0)
- {
- k = false;
- for(int ii=-h; ii< h; ii++) //iterate through the structural element
- {
- for(int jj=-w; jj<w; jj++)
- if (strEl.at<uchar>(ii+h, jj+w) == 1 && src.at<uchar>(i+ii, j+jj) == 255)
- {
- dst.at<uchar>(i, j) = 255;
- k = true;
- break;
- }
- if (k) break;
- }
- }
- return dst;
- }
- void opening(Mat img, Mat strEl = defElStruct) {
- Mat res = erode(img, strEl);
- res = dilate(res, strEl);
- return res;
- }
- void closing(Mat img, Mat strEl = defElStruct) {
- Mat res = erode(img, strEl);
- res = dilate(res, strEl);
- return res;
- }
- void dilationTest() {
- int n;
- std::cout << "Number of dilations: ";
- std::cin >> n;
- char fname[MAX_PATH];
- while(openFileDlg(fname)) {
- Mat src = imread(fname, CV_LOAD_IMAGE_GRAYSCALE);
- Mat res = src.clone();
- for(int i=0;i<n;i++) {
- res = dilate(res);
- std::cout<< "Iteration " << i+1 << '\n';
- imshow("original", src);
- imshow("result", res);
- waitKey();
- }
- }
- }
- void erosionTest() {
- int n;
- std::cout << "Number of erosions: ";
- std::cin >> n;
- char fname[MAX_PATH];
- while(openFileDlg(fname)) {
- Mat src = imread(fname, CV_LOAD_IMAGE_GRAYSCALE);
- Mat res = src.clone();
- for(int i=0;i<n;i++) {
- res = erode(res);
- std::cout<< "Iteration " << i+1 << '\n';
- imshow("original", src);
- imshow("result", res);
- waitKey();
- }
- }
- }
- void openingTest() {
- char fname[MAX_PATH];
- while(openFileDlg(fname)) {
- Mat src = imread(fname, CV_LOAD_IMAGE_GRAYSCALE);
- Mat res = opening(src);
- imshow("original", src);
- imshow("after opening", res);
- }
- }
- void closingTest() {
- char fname[MAX_PATH];
- while(openFileDlg(fname)) {
- Mat src = imread(fname, CV_LOAD_IMAGE_GRAYSCALE);
- Mat res = closing(src);
- imshow("original", src);
- imshow("after opening", res);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement