47 lines
1.0 KiB
C++
47 lines
1.0 KiB
C++
#include "histo.h"
|
|
#include "opencv2/imgcodecs.hpp"
|
|
#include <opencv2/core.hpp>
|
|
#include <opencv2/highgui.hpp>
|
|
#include <opencv2/imgproc.hpp>
|
|
#include <iostream>
|
|
|
|
using namespace cv;
|
|
|
|
void thinning(const Mat img, Mat& skel){
|
|
Mat mask, se, eroded, tmp;
|
|
mask = img.clone();
|
|
|
|
se = Mat::zeros(img.size(), CV_8UC1);
|
|
se = getStructuringElement(MORPH_CROSS, Size(3,3));
|
|
|
|
while(true){
|
|
erode(mask, eroded, se);
|
|
dilate(eroded, tmp, se);
|
|
tmp = mask - tmp;
|
|
skel = skel | tmp;
|
|
eroded.copyTo(mask); //shallow copy miatt kulonben csak a fejlecet masolja
|
|
|
|
if(countNonZero(mask) == 0){
|
|
break;
|
|
}
|
|
imshow("mask", mask);
|
|
imshow("skel", skel);
|
|
waitKey(100);
|
|
}
|
|
}
|
|
|
|
|
|
int main(){
|
|
Mat img = imread("../wrench.jpg", IMREAD_GRAYSCALE);
|
|
Mat mask, skel;
|
|
|
|
threshold(img, mask, 80, 255, THRESH_BINARY_INV);
|
|
//medianBlur(mask, mask, 7);
|
|
thinning(mask, skel);
|
|
|
|
imshow("mask", mask);
|
|
|
|
waitKey(0);
|
|
return 0;
|
|
}
|