How to measure the dimension of object with webcam video openCV?
Actually I want to build a system/application that can measure the dimension/size of the object by using OpenCV, but I doesn't have any idea how to code the measurement function. Here is the code.
#include "opencv2/highgui/highgui.hpp"
#include "opencv/cv.h"
#include <opencv/cxcore.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace cv;
using namespace std;
int main(int, char**)
{
Mat src;
Mat src_gray;
int thresh = 100;
int max_thresh = 255;
RNG rng (12345);
cv::Mat frame;
VideoCapture capture;
capture.open(0);
while (true)
{
capture.read(frame);
Mat threshold_output;
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
cvtColor(frame, src_gray, CV_BGR2GRAY); //produce out2, a one-channel image (CV_BUC1)
blur(src_gray, src_gray, Size(5,5));
threshold(src_gray, threshold_output, thresh, max_thresh, CV_THRESH_BINARY_INV);
findContours(threshold_output, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, Point(0,0));
//Find the rotated rectangles
vector<RotatedRect> minRect(contours.size());
for(int i=0; i<contours.size(); i++)
{
minRect[i] = minAreaRect(Mat(contours[i]));
}
//Draw contours + rotated rectangles + ellipses
Mat drawing = Mat::zeros(threshold_output.size(), CV_8UC3);
for(int i=0; i<contours.size(); i++)
{
Scalar color = Scalar(rng.uniform(0,0), rng.uniform(0,0), rng.uniform(250,250));
//countours
drawContours(drawing, contours, i, color, 1,8, vector<Vec4i>(), 0, Point());
//Rotated rectangle
Point2f rect_points[4]; minRect[i].points(rect_points);
for(int j=0; j<4; j++)
line(frame, rect_points[j], rect_points[(j+1)%4], color, 1, 8);
}
//Show in a window
namedWindow("Object Measurement", CV_WINDOW_AUTOSIZE);
imshow("Object Measurement",frame);
int c = cvWaitKey(10);
if ((char) c==72)
break;
}
return 0;
}