项目背景

有一个像素数较少的图像,在上面找轮廓,显示轮廓锯齿严重;

如何将轮廓进行平滑?

一开始是想着将轮廓上的拐点拟合出一个贝塞尔曲线,由于要绘制回原图像上,且贝塞尔曲线的生成也没有找到很好的办法;

后来又想到可以将图像和轮廓的绘制分为两个图层,将轮廓的绘制图层放大,计算出一个高精度的轮廓线,这样的轮廓线更加平滑,采样更高;然后缩小合并在原图上;

具体实现

主要是用了cv::blur和resize等opencv函数;

1.将图像模糊处理;

2.将图像放大,并进行插值;

3.将图像根据阈值,缩小轮廓范围;

图像模糊

cv::blur(in_mat, out_mat, cv::Size(3, 3));

图像放大

cv::resize(in_mat, out_mat, cv::Size(width*10, height*10), 0, 0, INTER_CUBIC);

查找图像轮廓绘制

将放大图像,找轮廓,在放大图像上绘制轮廓;

vector<vector<Point>>contours;//轮廓
vector<Vec4i>hierachy;//存放轮廓结构变量
cv::findContours(blur_mat, contours, hierachy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
drawContours(blur_mat, contours, -1, cv::Scalar(255), 3);imshow("draw contours image", blur_mat);
waitKey();

使用cv::threshold将图像中100-255内的值保留,除去其他值;

cv::threshold(blur_mat, threshold_mat, 100, 255, THRESH_BINARY);

再次基础上,找轮廓并绘制在blur_mat上;

改变cv::threshold内的阈值范围后,可以看到轮廓变大了:

注意:如果使用大的卷积核过度平滑图像数据,会将图像里的像素值降低过多,此时如果仍然使用使用较高的threshold后,轮廓有丢失;

OpenCV笔记-对轮廓进行平滑处理相关推荐

  1. Opencv 笔记5 边缘处理-canny、sobel、Laplacian、Prewitt

    一.边缘检测概述 边缘检测是计算视觉中的基本问题,边缘检测的目的是标识图像中亮度变换明显的点.边缘检测大幅度的减少了图像的数据量(分为两种:灰度图像边缘检测和彩色图像边缘检测),并且剔除了不相关的信息 ...

  2. OpenCV笔记-图像预处理1

    OpenCV笔记 一. 图像预处理 1. 图像显示与存储 1.1 颜色空间 颜色空间(RGB) 加法混色 三通道:RGB 一个像素的颜色值:(b,g,r) 取值范围:[0,255] or [0.0,1 ...

  3. Python-OpenCV 笔记6 -- 轮廓(Contours)

    Python-OpenCV 笔记6 – 轮廓(Contours) 参考文档: https://docs.opencv.org/3.4/dd/d49/tutorial_py_contour_featur ...

  4. OpenCV 笔记 -- 边缘检测(Sobel、Laplace、Canny)

    OpenCV 笔记 – 边缘检测(Sobel.Laplace.Canny) 参考文档 一.Sobel 算子 1.简介 Sobel 算子是一个离散的一阶差分算子,用来计算图像亮度函数的一阶梯度近似值.在 ...

  5. OpenCV 中的图像处理 004_平滑图像

    本文主要内容来自于 OpenCV-Python 教程 的 OpenCV 中的图像处理 部分,这部分的全部主要内容如下: 改变色彩空间 学习在不同色彩空间之间改变图像.另外学习跟踪视频中的彩色对象. 图 ...

  6. python+OpenCv笔记(十三):边缘检测——Sobel检测算子

    Sobel检测算子 概述: Sobel边缘检测算法比较简单,实际应用中效率比canny边缘检测效率要高,但是边缘不如Canny检测的准确,但是很多实际应用的场合,sobel边缘却是首选,Sobel算子 ...

  7. OpenCV检测图像轮廓

    轮廓只不过是图像中连接的曲线,或者图像中连通部分的边界,轮廓通常以图像中的边缘来计算,但是,边缘和轮廓的区别在于轮廓是闭合的,而边缘可以是任意的.边缘的概念局限于点及其邻域像素,轮廓将目标作为整体进行 ...

  8. 计算机视觉开源库OpenCV之绘制轮廓函数cv2.drawContours()介绍

    计算机视觉开源库OpenCV之绘制轮廓函数cv2.drawContours(),用于轮廓的绘制或填充. cv2.drawContours(image, contours, contourIdx, co ...

  9. 计算机视觉开源库OpenCV之查找轮廓函数cv2.findContours()介绍

    计算机视觉开源库OpenCV之查找轮廓函数cv2.findContours说明如下: 示例代码: #!/usr/bin/env python3import cv2image = cv2.imread( ...

最新文章

  1. java im 框架_Netty实战:设计一个IM框架
  2. ORA-14452的出现原因解析及解决方法
  3. ajax 省市级联项目中的实现
  4. C/C++使用openssl进行摘要和加密解密(md5, sha256, des, rsa)
  5. 华为android系统最新版,谷歌再放大招截胡鸿蒙系统!发布最新版安卓系统:国产手机抢先升级...
  6. MySQL中的多表插入更新与MS-SQL的对比
  7. 关于 ASP.NET MVC 中的视图生成
  8. ILI9341液晶LCD彩色显示原理
  9. vue请求PHP接口报错provisional headers are shown
  10. mono linux 运行机制,linux – Mono如何神奇?
  11. 【python】Python的基本数据类型之运算符
  12. 知乎问答 | 如何在同一坐标系下绘制多幅图形
  13. ubuntu服务器上提示 To run a command as administrator (user “root“), use “sudo <command>“. See “ 解决方案
  14. Python:SQLMap的工作流程
  15. matlab 绘制三维空间直线
  16. 标准gpx文件的时间格式
  17. php有没有ispostback,php用什么表示IsPostBack?
  18. 各地级市系列环境指标数据(2003-2017年)
  19. 《模拟电子技术基础》笔记——上交大郑益慧主讲——辅助教材《电子电路原理第四版》—— 要反反复复看直到记住图的推导过程——出错了欢迎指正——由于是快速刷了一遍还是要反复复习——学习这里面的思路
  20. 网络创业者之家:盘点那些不起眼的赚钱机会,成就了大批年轻人。

热门文章

  1. CSS预处理器-Sass、Less和Stylus-介绍和使用
  2. 一个超赞的智慧园区地图导航解决方案,如何实现园区路线导航?
  3. 计算机技术生活应用论文,计算机网络技术生活应用论文
  4. RAID5磁盘阵列搭建——新手上路
  5. 知名软件 XMind 竟然请求其它网站发布其盗版软件
  6. 11条职场潜规则助你爱上工作
  7. 机器学习里的贝叶斯基本理论、模型和算法
  8. 【充电站】_世俗智慧_哲学智慧_.
  9. 你看得懂的海明码校验和纠错原理(一)
  10. Navicat使用技巧(附快捷键)(多年总结,待完善)