imsanjoykb / Data-Science-Regular-Bootcamp

Regular practice on Data Science, Machien Learning, Deep Learning, Solving ML Project problem, Analytical Issue. Regular boost up my knowledge. The goal is to help learner with learning resource on Data Science filed.
https://imsanjoykb.github.io/
MIT License
106 stars 40 forks source link

Detecting touching objects #132

Open imsanjoykb opened 2 years ago

imsanjoykb commented 2 years ago

include <opencv2/opencv.hpp>

include

using namespace cv; using namespace std;

int main() { cv::Mat src = cv::imread("cards.jpg"); if (!src.data) return -1;

imshow("src", src);

// Create binary image from source image
cv::Mat bw;
cv::cvtColor(src, bw, CV_BGR2GRAY);

cv::threshold(bw, bw, 40, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);
imshow("bin", bw);

// Fill holes
cv::floodFill(bw,cv::Point2i(0,0),cv::Scalar(1));
for(int i=0;i<bw.rows*bw.cols;i++)
{
    if(bw.data[i]==0)
        bw.data[i]=255;
}

cv::threshold(bw, bw, 40, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);

imshow("filled", bw);

cv::Mat dist;
cv::distanceTransform(bw, dist, CV_DIST_L2, 3);
cv::normalize(dist, dist, 0, 1., cv::NORM_MINMAX);
imshow("Distance Transform Image", dist);

cv::threshold(dist, dist, .5, 1., CV_THRESH_BINARY);

// // Dilate a bit the dist image // Mat kernel1 = Mat::ones(7, 7, CV_8UC1); // dilate(dist, dist, kernel1); // erode(dist, dist, kernel1); // imshow("Peaks", dist);

// Create the CV_8U version of the distance image
// It is needed for cv::findContours()
cv::Mat dist_8u;