博客
关于我
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/

    你可能感兴趣的文章
    Open vSwitch实验常用命令
    查看>>
    Open WebUI 忘了登入密码怎么办?
    查看>>
    open***负载均衡高可用多种方案实战讲解02(老男孩主讲)
    查看>>
    Open-E DSS V7 应用系列之五 构建软件NAS
    查看>>
    Open-Sora代码详细解读(1):解读DiT结构
    查看>>
    Open-Sora代码详细解读(2):时空3D VAE
    查看>>
    Open-Source Service Discovery
    查看>>
    open-vm-tools-dkms : 依赖: open-vm-tools (>= 2:9.4.0-1280544-5ubuntu3) 但是它将不会被安装
    查看>>
    open3d-Dll缺失,未找到指定模块解决
    查看>>
    openai Midjourney代理服务 gpt大模型第三方api平台汇总 支持国内外各种大模型 持续更新中...
    查看>>
    OpenAll:Android打开组件新姿势【仅供用于学习了解ButterKnife框架基本原理】
    查看>>
    OpenASR 项目使用教程
    查看>>
    Openbox-桌面图标设置
    查看>>
    opencart出现no such file or dictionary
    查看>>
    OpenCV 3.1 imwrite()函数写入异常问题解决方法
    查看>>
    OpenCV 4.1.0版drawContours
    查看>>
    Opencv cv2.putText 函数详解
    查看>>
    opencv glob 内存溢出异常
    查看>>
    opencv Hog Demo
    查看>>
    opencv Hog学习总结
    查看>>