Qt图像处理技术七:轮廓提取
Qt图像处理技术七:轮廓提取
效果图

原理
图像先二值化让rgb数值相同,只有(0,0,0)或者(255,255,255)
取每个点的周围8个点,如果周围8个点与该点rgb值相同,则需要将该点描黑为(255,255,255)
代码
QImage ContourExtraction(const QImage &img)
{
int width = img.width();
int height = img.height();
int pixel[8];
QImage binImg = Binaryzation(img);
QImage newImg = QImage(width, height, QImage::Format_RGB888);
newImg.fill(Qt::white);
uint8_t *rgb = newImg.bits();
uint8_t *binrgb = binImg.bits();
int nRowBytes = (width * 24 + 31) / 32 * 4;
int lineNum_24 = 0;
for (int y = 1; y < height - 1; y++) {
for (int x = 1; x < width - 1; x++) {
memset(pixel, 0, 8);
lineNum_24 = y * nRowBytes;
if (binrgb[lineNum_24 + x * 3] == 0) {
rgb[lineNum_24 + x * 3] = 0;
rgb[lineNum_24 + x * 3 + 1] = 0;
rgb[lineNum_24 + x * 3 + 2] = 0;
pixel[0] = binrgb[(y - 1) * nRowBytes + (x - 1) * 3];
pixel[1] = binrgb[(y) * nRowBytes + (x - 1) * 3];
pixel[2] = binrgb[(y + 1) * nRowBytes + (x - 1) * 3];
pixel[3] = binrgb[(y - 1) * nRowBytes + (x) * 3];
pixel[4] = binrgb[(y + 1) * nRowBytes + (x) * 3];
pixel[5] = binrgb[(y - 1) * nRowBytes + (x + 1) * 3];
pixel[6] = binrgb[(y) * nRowBytes + (x + 1) * 3];
pixel[7] = binrgb[(y + 1) * nRowBytes + (x + 1) * 3];
if (pixel[0] + pixel[1] + pixel[2] + pixel[3] + pixel[4] + pixel[5] + pixel[6] + pixel[7] == 0) {
rgb[lineNum_24 + x * 3] = 255;
rgb[lineNum_24 + x * 3 + 1] = 255;
rgb[lineNum_24 + x * 3 + 2] = 255;
}
}
}
}
return newImg;
}
Qt图像处理技术七:轮廓提取的更多相关文章
- Win8 Metro(C#)数字图像处理--2.65形态学轮廓提取算法
原文:Win8 Metro(C#)数字图像处理--2.65形态学轮廓提取算法 [函数名称] 形态学轮廓提取函数 WriteableBitmap Morcontourextract ...
- Win8 Metro(C#)数字图像处理--2.40二值图像轮廓提取算法
原文:Win8 Metro(C#)数字图像处理--2.40二值图像轮廓提取算法 [函数名称] 二值图像轮廓提取 ContourExtraction(WriteableBitm ...
- 图像处理-07-图像的轮廓提取-Robert算子
图像的轮廓提取-Robert算子 图像的边缘:周围像素灰度有阶跃变化或“屋顶”变化的那些像素的集合,边缘广泛存在于物体与背景之间.物体与物体之间,基元与基元之间,是图像分割的重要依据. 物体的边缘是由 ...
- Win8Metro(C#)数字图像处理--2.40二值图像轮廓提取
http://dongtingyueh.blog.163.com/blog/static/4619453201271481335630/ [函数名称] 二值图像轮廓提取 Contour ...
- FPGA与数字图像处理技术
数字图像处理方法的重要性源于两个主要应用领域: 改善图像信息以便解释. 为存储.传输和表示而对图像数据进行处理,以便于机器自动理解. 图像处理(image processing): 用计算机对图像进行 ...
- webpack4 系列教程(七): SCSS提取和懒加载
教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步>>> (原文)webpack4 系列教程(七): SCSS 提取和懒加载. 个人技术小站: https://god ...
- Qt开发技术:图形视图框架(二)场景QGraphicsScene、QGraphicsItem与QGraphicsView详解
前话 Qt的图形视图框架,最核心的三个类为:QGraphicsScene.QGraphicsItem与QGraphicsView. 基于图形框架的高级白板软件Demo QGraphicsSce ...
- HTML5图形图像处理技术研究
摘要:图形图像处理平台大部分是传统的C/S架构的桌面应用程序,维护困难,共享性差,而B/S架构的Web程序具有易维护.易共享的优点.本文研究了基于HTML5的Web图形图像处理技术,用HTML5实现了 ...
- GDI+图形图像处理技术中Pen和Brush的简单使用和简单图形的绘制(C#)
1.Graphics Graphics对象是GDI+绘图表面,因此在Windows窗体应用程序中要使用GDI+创建绘图,必须要先创建Graphics.在给窗体注册一个Paint事件后,Graphics ...
- 三维模型2.5D轮廓提取及遮挡部分的剔除
轮廓提取相对容易,只需在2.5D渲染视角下,导出模型的顶点坐标以及基于视角的消隐后的三角形面,将三角面投影后合并就可得到轮廓,轮廓坐标基于2.5d图的基准坐标换算就得到.提取轮廓的在我另外一篇文章中有 ...
随机推荐
- NebulaGraph Desktop 使用初体验
前言 前两天 NebulaGraph 官方宣布了全新的开源 Desktop,旨在通过一体化方案解决图数据库部署复杂.工具碎片化.学习成本高等的痛点问题,我也是跃跃欲试.前期在初识 NebulaGrap ...
- 记录一段mysql代码
SELECT f . * , tmp.userid, tmp.cishu FROM fx_user f, ( SELECT a.id, b.userid AS userid, COUNT( * ) A ...
- 多版本Java 配置记录
来自 https://blog.csdn.net/zdl177/article/details/105246997 起因是为了启动MC 目录结构 Java总目录下放置多个jdk目录(jdk16.0.2 ...
- 使用UNRAID系统,搭建ALL IN ONE全过程
NAS最强攻略:使用UNRAID系统,搭建ALL IN ONE全过程!超万字教程,绝对干货! 2020-06-01 11:24:27 1690点赞 11149收藏 717评论 创作立场声明:熬了几个通 ...
- FFT & NTT & FWT 基础
FFT Part 公式 欧拉公式: \(e^{i\theta}=\cos{\theta}+i\sin{\theta}\) 特殊形式:\(e^{i\pi}=-1\) Begin 一个多项式 \(F=x^ ...
- ChatGTP获取的d读取excel通用程序。
procedure ReadExcelFile(const FileName: string; AMemtable: TFDmemtable); var ExcelApp: OleVariant; S ...
- AQS的release(int)方法底层源码
一.定义 release(int) 是 AQS(AbstractQueuedSynchronizer)中的一个核心方法,用于在独占模式下释放同步状态.如果释放成功,则会唤醒等待队列中的后继节点,使其有 ...
- 关于TCP的握手与挥手
关于TCP的握手与挥手 前言 由于自己每次都是唱的比懂的好听,光知道唱"三次握手四次挥手",再往里细问SYN标志就只能阿巴阿巴阿巴,为了解决自己的知识储备问题,顺便继续深入了解TC ...
- Asp.net mvc基础(三)View的查找
1.指定转到的视图 View("指定的视图名称"); 优先于寻找Action方法名称可以创建的视图的文件夹,如果没有,就去View文件夹下的Shared文件夹寻找指定的视图名称. ...
- 工良出品 | 长文讲解 MCP 和案例实战
作者:痴者工良 博客地址:https://www.whuanle.cn/ 示例项目地址:https://github.com/whuanle/mcpdemo 近期 MCP 协议越来越爆火,很多开发者都 ...