#include <vector>
#include <sstream>
#include <iostream>
#include <opencv2/opencv.hpp>
int
main(){
cv::VideoCapture cap(0);
while
(cv::waitKey(5) != 0x1b){
cv::Mat frame;
cap >> frame;
if
(!frame.data){
continue
;
}
cv::Mat grayImage, binImage;
cv::cvtColor(frame, grayImage, CV_BGR2GRAY);
cv::threshold(grayImage, binImage, 128.0, 255.0, CV_THRESH_OTSU);
cv::imshow(
"bin"
, binImage);
std::vector< std::vector< cv::Point > > contours;
cv::findContours(binImage, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);
for
(
auto
contour = contours.begin(); contour != contours.end(); contour++){
cv::polylines(frame, *contour,
true
, cv::Scalar(0, 255, 0), 2);
}
for
(
auto
contour = contours.begin(); contour != contours.end(); contour++){
std::vector< cv::Point > approx;
cv::approxPolyDP(cv::Mat(*contour), approx, 50.0,
true
);
double
area = cv::contourArea(approx);
if
(approx.size() == 4 && area > 1000.0){
cv::polylines(frame, approx,
true
, cv::Scalar(255, 0, 0), 2);
std::stringstream sst;
sst <<
"area : "
<< area;
cv::putText(frame, sst.str(), approx[0], CV_FONT_HERSHEY_PLAIN, 1.0, cv::Scalar(0, 128, 0));
}
}
cv::imshow(
"frame"
, frame);
}
}