diff --git a/source/main.cpp b/source/main.cpp index 8e5a464c82f22a572a83261fdcafc895c9cc55e8..fafeda4c9eaa768c98aed08acad85c0f67022d54 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -37,13 +37,15 @@ using namespace cv; using namespace std; +using namespace cv; +using namespace std; using namespace cv; using namespace std; Mat3b img = imread("C:\\Users\\RMD\\desktop\\1233.png"); Mat3b templ = imread("C:\\Users\\RMD\\desktop\\t1.png"); Mat3b templ2 = imread("C:\\Users\\RMD\\desktop\\t2.png"); Mat3b templ3 = imread("C:\\Users\\RMD\\desktop\\123456.png"); -Mat3b templ4 = imread("C:\\Users\\RMD\\desktop\\123456.png"); +//Mat3b templ4 = imread("C:\\Users\\RMD\\desktop\\123456.png"); Mat final = imread("C:\\Users\\RMD\\desktop\\123456.png"); #include "opencv2/features2d.hpp" #include "opencv2/features2d/features2d.hpp" @@ -53,9 +55,23 @@ struct rectanglesave { int ypos; int rowsize; int colsize; + int xposl; + int yposl; + int xposr; + int yposr; + int label; + double width; + double height; + double centerxpos; + double centerypos; bool status; }; +static int labelcount = 0; rectanglesave save[500] = { NULL }; +double lefttopxpos; +double lefttopypos; +double width; +double height; using namespace cv; using namespace std; bool check = true; @@ -87,11 +103,13 @@ void on_mouse(int event, int x, int y, int flags, void*) i++; } printf("xpos: %d, ypos: %d, col: %d, cols: %d\n", save[index].xpos, save[index].ypos, save[index].colsize, save[index].rowsize); + + rectangle(img, Rect(save[index].xpos, save[index].ypos, save[index].colsize, save[index].rowsize), Scalar(0, 0, 255), 1); if (save[index].status == true) rectangle(final, Rect(save[index].xpos, save[index].ypos, save[index].colsize - 4, save[index].rowsize - 4), Scalar(0, 0, 0), 1); - else - rectangle(final, Rect(save[index].xpos - 10, save[index].ypos - 6, save[index].colsize - 4, save[index].rowsize - 4), Scalar(0, 0, 0), 1); + else + rectangle(final, Rect(save[index].xpos-10 , save[index].ypos-6 , save[index].colsize - 4, save[index].rowsize - 4), Scalar(0, 0, 0), 1); imshow("final", img); imshow("final2", final); @@ -148,6 +166,32 @@ void on_mouse(int event, int x, int y, int flags, void*) break; } } +void on_mouse2(int event, int x, int y, int flags, void*) +{ + double min = 100; + int index; + int i = 0; + + switch (event) { + + case EVENT_LBUTTONUP: + //cout << "EVENT_DBDBBUTTONUP: " << x << ", " << y << endl; + + while (save[i].xpos != 0) { + double distance = sqrt(pow(x - save[i].xpos, 2) + pow(y - save[i].ypos, 2)); + if (distance < min) { + min = distance; + index = i; + } + i++; + } + printf("\nCentorxpos percent: %lf%%\nCentorypos percent: %lf%%\nWidth percent : %lf%%\nHeight percent : %lf%%\n\n", save[index].centerxpos, save[index].centerypos,save[index].width,save[index].height); + break; + + default: + break; + } +} #include <iostream> #include <cstdlib> @@ -169,7 +213,7 @@ int main() cvtColor(templ, templ_gray, COLOR_BGR2GRAY); cvtColor(templ2, templ_gray2, COLOR_BGR2GRAY); cvtColor(templ3, templ_gray3, COLOR_BGR2GRAY); - cvtColor(templ4, templ_gray4, COLOR_BGR2GRAY); + //cvtColor(templ4, templ_gray4, COLOR_BGR2GRAY); final = ~final; Mat1f result; Mat1f result2; @@ -196,7 +240,7 @@ int main() matchTemplate(img, templ, result, TM_CCOEFF_NORMED); matchTemplate(img, templ2, result2, TM_CCOEFF_NORMED); matchTemplate(img, templ3, result3, TM_CCOEFF_NORMED); - matchTemplate(img, templ4, result4, TM_CCOEFF_NORMED); + //matchTemplate(img, templ4, result4, TM_CCOEFF_NORMED); createTrackbar("Set !", "final", 0, 1000, on_trackbar); waitKey(0); @@ -214,7 +258,7 @@ int main() threshold(result, result, thresh, 1., THRESH_BINARY); threshold(result2, result2, thresh, 1., THRESH_BINARY); threshold(result3, result3, thresh, 1., THRESH_BINARY); - threshold(result4, result4, thresh, 1., THRESH_BINARY); + //threshold(result4, result4, thresh, 1., THRESH_BINARY); printf("thresh: %f", thresh); Mat1b resb, resb2,resb3,resb4; result.convertTo(resb, CV_8U, 255); @@ -231,7 +275,7 @@ int main() findContours(resb, contours, RETR_LIST, CHAIN_APPROX_SIMPLE); findContours(resb2, contours2, RETR_LIST, CHAIN_APPROX_SIMPLE); findContours(resb3, contours3, RETR_LIST, CHAIN_APPROX_SIMPLE); - findContours(resb4, contours4, RETR_LIST, CHAIN_APPROX_SIMPLE); + //findContours(resb4, contours4, RETR_LIST, CHAIN_APPROX_SIMPLE); //printf("contoursize: %d", contours.size()); int num111 = -100, num222 = -100; @@ -273,8 +317,11 @@ int main() } else max_point.x = (int)((templ.cols + 2) * (floor((double)max_point.x / (double)(templ.cols + 2) + 0.5))); - save[count].xpos = max_point.x, save[count].ypos = max_point.y, save[count].colsize = templ.cols, save[count].rowsize = templ.rows, save[count].status = true;; + save[count].xpos = max_point.x, save[count].ypos = max_point.y, save[count].colsize = templ.cols, save[count].rowsize = templ.rows, save[count].status = true, save[count].xposl = max_point.x ,save[count].yposl=max_point.y,save[count].xposr= templ.cols - 4,save[count].yposr=templ.rows-4,save[count].width=templ.cols-4,save[count].height=templ.rows-4; count++; + save[count].label = ++labelcount; + string str = to_string(save[count].label); + putText(final, str, Point(max_point.x+(templ.cols-4)/2-2, max_point.y+(templ2.rows-4)/2), 2, 0.2, Scalar(0, 0, 255), 1); rectangle(final, Rect(max_point.x, max_point.y, templ.cols - 4, templ.rows - 4), Scalar(100, 100, 100), 1); rectangle(img, Rect(max_point.x, max_point.y, templ.cols, templ.rows), Scalar(0, 255, 0), 1); @@ -326,10 +373,15 @@ int main() } else max_point.x = (int)(templ2.cols * (floor((double)max_point.x / (double)(templ2.cols) + 0.5))); - save[count].xpos = max_point.x, save[count].ypos = max_point.y, save[count].colsize = templ2.cols, save[count].rowsize = templ2.rows, save[count].status = false; + save[count].xpos = max_point.x, save[count].ypos = max_point.y, save[count].colsize = templ2.cols, save[count].rowsize = templ2.rows, save[count].status = false, save[count].xposl = max_point.x-10, save[count].yposl = max_point.y-6,save[count].xposr=templ2.cols-4,save[count].yposr=templ2.rows-4,save[count].width=templ2.cols-4,save[count].height=templ2.rows-4; count++; + save[count].label = ++labelcount; + string str = to_string(save[count].label); + putText(final, str, Point(max_point.x-10, (max_point.y -6)+(templ2.rows-4)/2), 2, 0.2, Scalar(0, 0, 255), 1); rectangle(final, Rect(max_point.x - 10, max_point.y - 6, templ2.cols - 4, templ2.rows - 4), Scalar(100, 100, 100), 1); rectangle(img, Rect(max_point.x, max_point.y, templ2.cols, templ2.rows), Scalar(0, 255, 0), 1); + + //printf("xposl : %d xposr : %d yposl : %d yposr: %d\n", max_point.x-10, max_point.y-6, templ2.cols-4, templ2.rows-4); } num111 = num11; @@ -352,17 +404,22 @@ int main() minMaxLoc(result3, NULL, &max_val, NULL, &max_point, mask); save[count].xpos = max_point.x, save[count].ypos = max_point.y, save[count].colsize = templ3.cols, save[count].rowsize = templ3.rows, save[count].status = true; count++; - rectangle(final, Rect(max_point.x, max_point.y , templ3.cols - 4, templ3.rows - 4), Scalar(100, 100, 100), 1); - rectangle(img, Rect(max_point.x, max_point.y, templ3.cols, templ3.rows), Scalar(0, 255, 0), 1); - - + rectangle(final, Rect(max_point.x+190, max_point.y+90 , templ3.cols - 270, templ3.rows - 170), Scalar(100, 100, 100), 1); + rectangle(img, Rect(max_point.x+190, max_point.y+90, templ3.cols-270, templ3.rows-170), Scalar(0, 255, 0), 1); + width =(templ3.cols - 270); + height =(templ3.rows - 170); + lefttopxpos = max_point.x +190; + lefttopypos = max_point.y +90; num111 = num11; num222 = num22; num11 = max_point.x; num22 = max_point.y; - }num111 = -100, num222 = -100; + } + + /* + num111 = -100, num222 = -100; num11 = -100, num22 = -100; int t5[100] = { NULL }, t6[100] = { NULL }; for (int i = 0; i < contours4.size(); ++i) @@ -385,12 +442,30 @@ int main() num11 = max_point.x; num22 = max_point.y; + }*/ + + //save[i].centerxpos = (save[i].xpos - lefttopxpos) / width; + //save[i].centerypos = (save[i].ypos - lefttopypos) / height; + //printf("x : %lf y : %lf \n", save[i].centerxpos, save[i].centerypos); + int e = 0; + while (save[e].xpos!=NULL) { + double cenx = (double)(save[e].xposl + save[e].xposr/2) ; + double ceny = (double)(save[e].yposl + save[e].yposr/2) ; + save[e].centerxpos = (((double)cenx - lefttopxpos) / (double)width)*100; + save[e].centerypos = (((double)ceny - lefttopypos) / (double)height)*100; + save[e].width = (save[e].width / width)*100; + save[e].height = (save[e].height / height)*100; + save[e].label += 1; + printf("\nlabel: %d\nCenterXpos percent: %lf%%\nCenterYpos percent: %lf%%\nWidth percent: %lf%%\nHeightpercent: %lf%%\n", save[e].label, save[e].centerxpos, save[e].centerypos, save[e].width, save[e].height); + e++; } - Mat mask = cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(2, 2), cv::Point(1, 1)); + + Mat mask = cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(2, 2), cv::Point(1, 1)); + setMouseCallback("final", on_mouse); namedWindow("final2"); - setMouseCallback("final2", on_mouse); + setMouseCallback("final2", on_mouse2); imshow("final", img); imshow("final2", final); printf("adsf");