#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv) {
string filename[] = { "C:\\Users\\Administrator\\Desktop\\IMG_3454.jpg" };
Mat in = imread(filename[0], 1);
Mat img, gray, out, canny;
in.copyTo(img);
cvtColor(img, gray, COLOR_BGR2GRAY);
in.copyTo(out);
imshow("gray", gray);
Canny(gray, canny, 80, 255);
vector<vector<Point>> contours;
findContours(canny, contours, CV_RETR_CCOMP, CV_RETR_FLOODFILL);
drawContours(out, contours, -1, Scalar(0,255,0));
for each (vector<Point> points in contours)
{
RotatedRect rRect = minAreaRect(points);
Point2f vertices[4]; //定义矩形的4个顶点
rRect.points(vertices); //计算矩形的4个顶点
for (int i = 0; i < 4; i++)
line(out, vertices[i], vertices[(i + 1) % 4], Scalar(0, 255, 255));
}
for each (vector<Point> points in contours)
{
Rect rect = boundingRect(points);
rectangle(out, rect, Scalar(255,0,0));
}
imshow("contours", out);
waitKey(0);
return 0;
}
转载于:https://my.oschina.net/wellsoschina/blog/1587464