Brillenerkennung

Was ich versuche zu tun ist, messen Sie die Dicke der Brillengestelle. Ich hatte die Idee, die Dicke der Konturen des Rahmens zu messen (könnte ein besserer Weg sein?). Ich habe bisher den Rahmen der Brille umrissen, aber es gibt Lücken, in denen sich die Linien nicht treffen. Ich habe überlegt, HoughLinesP zu verwenden, bin mir aber nicht sicher, ob ich das benötige.

isher habe ich folgende Schritte durchgeführ

Bild in Graustufen konvertierenErstellen Sie einen ROI um den Augen- / BrillenbereichBlur das BildDilate das Bild (haben dies getan, um alle dünnen gerahmten Gläser zu entfernen)Conduct Canny KantenerkennungFundkonturen

Dies sind die Ergebnisse:

Dies ist mein Code bisher:

//convert to grayscale
cv::Mat grayscaleImg;
cv::cvtColor( img, grayscaleImg, CV_BGR2GRAY );

//create ROI
cv::Mat eyeAreaROI(grayscaleImg, centreEyesRect);
cv::imshow("roi", eyeAreaROI);

//blur
cv::Mat blurredROI;
cv::blur(eyeAreaROI, blurredROI, Size(3,3));
cv::imshow("blurred", blurredROI);

//dilate thin lines
cv::Mat dilated_dst;
int dilate_elem = 0;
int dilate_size = 1;
int dilate_type = MORPH_RECT;

cv::Mat element = getStructuringElement(dilate_type, 
    cv::Size(2*dilate_size + 1, 2*dilate_size+1), 
    cv::Point(dilate_size, dilate_size));

cv::dilate(blurredROI, dilated_dst, element);
cv::imshow("dilate", dilated_dst);

//edge detection
int lowThreshold = 100;
int ratio = 3;
int kernel_size = 3;    

cv::Canny(dilated_dst, dilated_dst, lowThreshold, lowThreshold*ratio, kernel_size);

//create matrix of the same type and size as ROI
Mat dst;
dst.create(eyeAreaROI.size(), dilated_dst.type());
dst = Scalar::all(0);

dilated_dst.copyTo(dst, dilated_dst);
cv::imshow("edges", dst);

//join the lines and fill in
vector<Vec4i> hierarchy;
vector<vector<Point>> contours;

cv::findContours(dilated_dst, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE);
cv::imshow("contours", dilated_dst);

Ich bin mir nicht ganz sicher, wie die nächsten Schritte aussehen werden oder wie ich oben sagte, ob ich HoughLinesP verwenden sollte und wie ich es implementieren soll. Jede Hilfe wird sehr geschätzt!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage