Quantcast
Channel: OpenCV Q&A Forum - RSS feed
Viewing all articles
Browse latest Browse all 41027

Mat hierarchy in Java vs vector hierarchy in C++

$
0
0
I have a function in C++ as below. void trackFilteredObject(int &x, int &y, cv::Mat threshold, cv::Mat cameraFeed){ cv::Mat temp; threshold.copyTo(temp); vector< vector> contours; vector hierarchy; findContours(temp, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE); double refArea = 0; bool objectFound = false; if (hierarchy.size() > 0) { vector< vector> largestContourVec; largestContourVec.push_back(contours.at(contours.size() - 1)); Eco_Rect = boundingRect(largestContourVec.at(0)); int numObjects = hierarchy.size(); if (numObjects<100){ for (int index = 0; index >= 0; index = hierarchy[index][0]){ cv::Moments moment = moments((cv::Mat)contours[index]); double area = moment.m00; if (area>0 && area>refArea){ x = moment.m10 / area; y = moment.m01 / area; objectFound = true; refArea = area; } } if (objectFound == true){ cv::circle(cameraFeed, cv::Point(x, y), 10, cv::Scalar(0, 255, 0), 2); line(cameraFeed, cv::Point(roi_rect.width / 2, 0), cv::Point(roi_rect.width / 2, roi_rect.height), 2, 2); line(cameraFeed, cv::Point(0, roi_rect.height / 2), cv::Point(roi_rect.width,roi_rect.height / 2), 2, 2); } } else cv::putText(cameraFeed, "TOO MUCH NOISE! ADJUST FILTER", cv::Point(0, 50), 1, 2, cv::Scalar(0, 0, 255), 2); } } Then I want to convert it to Java to use in android. void trackFilteredObject(int x, int y, Mat threshold, Mat cameraFeed){ Mat temp = new Mat(); threshold.copyTo(temp); List contours = new ArrayList(); Mat hierarchy = new Mat(); findContours(temp, contours, hierarchy, 2, 2); double refArea = 0; boolean objectFound = false; if (hierarchy.size() > 0) { List largestContourVec = new ArrayList(); largestContourVec.add(contours.get(contours.size() - 1)); Eco_Rect = boundingRect(largestContourVec.get(0)); int numObjects = hierarchy.size(); if (numObjects<100){ for (int index = 0; index >= 0; index = hierarchy[index][0]){ Moments moment = moments((Mat)contours.get(index)); double area = moment.get_m00(); if (area>0 && area>refArea){ x = (int) (moment.get_m10() / area); y = (int) (moment.get_m01() / area); objectFound = true; refArea = area; } } if (objectFound == true){ circle(cameraFeed, new Point(x, y), 10, new Scalar(0, 255, 0), 2); line(cameraFeed, new Point(roi_rect.width / 2, 0), new Point(roi_rect.width / 2, roi_rect.height),new Scalar(0,0,255), 2, 2); line(cameraFeed, new Point(0, roi_rect.height / 2), new Point(roi_rect.width,roi_rect.height / 2),new Scalar(0,0,255), 2, 2); } } else putText(cameraFeed, "TOO MUCH NOISE! ADJUST FILTER", new Point(0, 50), 1, 2, new Scalar(0, 0, 255), 2); } } However, i do not how to convert 3 lines coding that i commented due to different type of hierarchy in C++ and Java. hierarchy.size() > 0 Error: cant compare org.opencv.core.Size with int. This one maybe can replace by hierarchy != null. int numObjects = hierarchy.size(); Error: Basically same as above but i have no idea how to change it. I need to know the size. for (int index = 0; index >= 0; index = hierarchy[index][0]) Error: In c++ hierarchy is vector type but in Java is Mat type. Anyone can help me?

Viewing all articles
Browse latest Browse all 41027

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>