博客
关于我
opencv29-轮廓周围绘制矩形框和圆形框
阅读量:791 次
发布时间:2023-02-23

本文共 2397 字,大约阅读时间需要 7 分钟。

#include 
#include
#include
using namespace cv;using namespace std;Mat src, temp, dst, src_gray;int threshold_v = 170;int threshold_max = 255;char *output = "output image";RNG rng;void Contours_Callback(int, void*);int main() { // 加载图像 src = imread("E:\\vs2015\\opencvstudy\\29police.jpg"); if (!src.data) { cout << "could not load image!" << endl; return -1; } imshow("inputImage", src); // 转换为灰度图像 cvtColor(src, src_gray, CV_BGR2GRAY); // 模糊处理 blur(src_gray, src_gray, Size(3, 3), Point(-1, -1), BORDER_DEFAULT); // 创建跟踪条 namedWindow(output, CV_WINDOW_AUTOSIZE); createTrackbar("Size", output, &threshold_v, threshold_max, Contours_Callback); // 调用回调函数 Contours_Callback(0, 0); waitKey(0); return 0;}void Contours_Callback(int, void*) { Mat bin_image; vector
contours; vector
hierarchy; // 二值化处理 threshold(src_gray, bin_image, threshold_v, threshold_max, THRESH_BINARY); // 查找轮廓 findContours(bin_image, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(-1, -1)); // 轮廓分析 vector
> contours_poly(contours.size()); vector
ploy_rects(contours.size()); vector
ccs(contours.size()); vector
radius(contours.size()); vector
minRects(contours.size()); vector
myellipse(contours.size()); for (size_t i = 0; i < contours.size(); i++) { // 用近似法得到外接多边形 approxPolyDP(Mat(contours[i]), contours_poly[i], 3, true); // 获取多边形的外接矩形 ploy_rects[i] = boundingRect(contours_poly[i]); // 计算多边形的外接圆 minEnclosingCircle(contours_poly[i], ccs[i], radius[i]); // 计算椭圆 if (contours_poly[i].size() > 5) { myellipse[i] = fitEllipse(contours_poly[i]); minRects[i] = minAreaRect(contours_poly[i]); } } // 绘制结果 src.copyTo(dst); Point2f pts[4]; for (size_t t = 0; t < contours.size(); t++) { Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255)); ellipse(dst, myellipse[t], color, 2, 8); // 画外接矩形 minRects[t].points(pts); for (int r = 0; r < 4; r++) { line(dst, pts[r], pts[(r+1) % 4], color, 2, 8); } } imshow("result", dst);}

以上代码展示了一个使用 OpenCV 库实现的图像处理程序,该程序用于绘制图像中的轮廓。程序的主要步骤包括:

  • 加载输入图像并转换为灰度格式
  • 模糊处理以减少噪声
  • 创建跟踪条以动态调整阈值
  • 查找图像中的轮廓并进行分析
  • 绘制分析结果(包括外接多边形、外接矩形、外接圆和椭圆)
  • 程序通过 OpenCV 的 findContours 函数查找轮廓,并使用 approxPolyDP 近似多边形、boundingRect 获取外接矩形、minEnclosingCircle 计算外接圆以及 fitEllipse 计算椭圆等功能进行分析。最终结果通过 imshow 函数显示。

    转载地址:http://tmsfk.baihongyu.com/

    你可能感兴趣的文章