I have stored the defects using convexity defects in an 4 element vector integer array using vec4i.
My convex hull array is in hull element and contours in Contours; What i want to do is draw a line from start point of a convexity defect to the end point of one. For this i need to access the element start index which is present in the vec4i of a defects vector!
How do i do this??
#include <opencv\cv.h> #include <opencv2\highgui\highgui.hpp> #include<opencv\cvaux.h> #include<opencv\cxcore.h> #include <opencv2\imgproc\imgproc.hpp> #include <iostream> #include<conio.h> #include <stdlib.h> using namespace cv; using namespace std; int main(){ Mat img, frame, img2, img3; VideoCapture cam(0); while (true){ cam.read(frame); cvtColor(frame, img, CV_BGR2HSV); //thresholding inRange(img, Scalar(0, 143, 86), Scalar(39, 255, 241), img2); imshow("hi", img2); //finding contours vector<vector<Point>> Contours; vector<Vec4i> hier; //morphological transformations erode(img2, img2, getStructuringElement(MORPH_RECT, Size(3, 3))); erode(img2, img2, getStructuringElement(MORPH_RECT, Size(3, 3))); dilate(img2, img2, getStructuringElement(MORPH_RECT, Size(8, 8))); dilate(img2, img2, getStructuringElement(MORPH_RECT, Size(8, 8))); //finding the contours required findContours(img2, Contours, hier, CV_RETR_CCOMP, CV_CHAIN_APPROX_NONE, Point(0, 0)); //finding the contour of largest area and storing its index int lrgctridx = 0; int maxarea = 0; for (int i = 0; i < Contours.size(); i++) { double a = contourArea(Contours[i]); if (a> maxarea) { maxarea = a; lrgctridx = i; } } //convex hulls vector<vector<Point> >hull(Contours.size()); vector<vector<Vec4i>> defects(Contours.size()); for (int i = 0; i < Contours.size(); i++) { convexHull(Contours[i], hull[i], false); convexityDefects(Contours[i], hull[i], defects[i]); } //REQUIRED contour is detected,then convex hell is found and also convexity defects are found and stored in defects if (maxarea>100){ drawContours(frame, hull, lrgctridx, Scalar(255, 255, 255), 1, 8, vector<Vec4i>(), 0, Point()); \\ drawing the required lines joining defects!im facing problem on how to acheive this since i dont know how to access the elements stored in defects line(frame, \\startindex, \\endindex, \\color, 1); } imshow("output", frame); char key = waitKey(33); if (key == 27) break; } }
Also my output window shows error when i add the convexityDefects(..) line i think it is in wrong format! Thanks in advance.