#include "iostream"
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main()
{
Mat img, temp, temp2,dst, dstbin, distancetransform,rel, rel2,gary, _threshold, temp3;
img = imread("shou.jpg");
resize(img, dst, Size(0, 0), 0.1, 0.1);
dst.copyTo(temp3);
cvtColor(dst, gary, COLOR_BGR2GRAY);
threshold(gary, _threshold, 100, 255, THRESH_TOZERO);
GaussianBlur(_threshold, temp2, Size(7, 7), 5, 0);
Mat canny;
Canny(temp2, canny, 80, 160, 3, false);
Mat kernel = getStructuringElement(1, Size(3, 3));
//erode(canny, canny, kernel);
dilate(canny, canny, kernel);
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
findContours(canny, contours, hierarchy, 0, 2, Point());
for (int i = 0; i < contours.size(); i++)
{
Rect rect = boundingRect(contours[i]);
RotatedRect rotatedrect = minAreaRect(contours[i]);
Point2f _points[4];
rotatedrect.points(_points);
Point2f cen = rotatedrect.center;
circle(dst, cen, 3, Scalar(255, 0, 0));
//rectangle(dst, rect, Scalar(0, 255, 0));
for (int j = 0; j < 4; j++)
{
if (j == 3)
{
line(dst, _points[j], _points[0], Scalar(0, 0, 255));
break;
}
line(dst, _points[j], _points[j + 1], Scalar(0, 0, 255));
}
Mat po;
approxPolyDP(contours[i], po, 4, true);
for (int n = 0; n < po.rows; n++)
{
if (n == po.rows - 1)
{
Vec2i vec1 = po.at<Vec2i>(n);
Vec2i vec2 = po.at<Vec2i>(0);
line(temp3, vec1, vec2, Scalar(255, 0, 255));
break;
}
Vec2i vec11 = po.at<Vec2i>(n);
Vec2i vec22 = po.at<Vec2i>(n+1);
line(temp3, vec11, vec22, Scalar(255, 0, 255));
}
}
imshow("dst", dst);
imshow("temp3", temp3);
imshow("canny", canny);
waitKey(0);
return 1;
}
文章来源地址https://www.toymoban.com/news/detail-605104.html
文章来源:https://www.toymoban.com/news/detail-605104.html
到了这里,关于opencv 矩形边框 boundingRect minAreaRect approxPolyDP的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!