I need to do the following : 1.Load largest_contour image 2. Calculate moments of the ROI 3. Find the COG of the ROI using equation :{x,y} = {M10/M00, M01/M00} 4. Align the contour ,that is ,to find the COG of the image and translate the ROI to the COG of the image 5. Save the aligned image temporarily 6. Display the aligned image
I'm unable to find the COG and align the contour
my c++ code for finding contour :
include <iostream>
include "opencv2/core/core.hpp"
include "opencv2/imgproc/imgproc.hpp"
include "opencv2/highgui/highgui.hpp"
include <iostream>
using namespace cv; using namespace std; int main() { int largest_area = 0; int largest_contour_index = 0; Rect bounding_rect;
Mat src = imread("Morp.jpg"); //Load source image
Mat thr(src.rows, src.cols, CV_8UC1);
Mat dst(src.rows, src.cols, CV_8UC1, Scalar::all(0));
//cvtColor(src, thr, CV_BGR2GRAY); //Convert to gray
//threshold(thr, thr, 25, 255, THRESH_BINARY); //Threshold the gray
vector<vector<Point>> contours; // Vector for storing contour
vector<Vec4i> hierarchy;
findContours(thr, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE); // Find the contours in the image
for (int i = 0; i< contours.size(); i++) // iterate through each contour.
{
double a = contourArea(contours[i], false); // Find the area of contour
if (a>largest_area) {
largest_area = a;
largest_contour_index = i; //Store the index of largest contour
bounding_rect = boundingRect(contours[i]); // Find the bounding rectangle for biggest contour
}
}
Scalar color(255, 255, 255);
drawContours(dst, contours, largest_contour_index, color, CV_FILLED, 8, hierarchy); // Draw the largest contour using previously stored index.
rectangle(src, bounding_rect, Scalar(0, 255, 0), 1, 8, 0);
imshow("src", src);
imshow("Largest Contour", dst);
imwrite("Contour.jpg", dst);
waitKey(0);
}