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图的基准坐标换算就得到.提取轮廓的在我另外一篇文章中有 ...
随机推荐
- Scala List集合 List 有序不唯一,元素可重复
package com.wyh.day01 import scala.collection.mutable.ListBuffer /** * List 有序不唯一,元素可重复 */ object Sc ...
- C# fleck websocket使用
转载于:https://www.itspeeding.com/article/28 1.web页面 1 <html lang="en" xmlns="http:// ...
- Manus爆火,是硬核还是营销?
相信这两天小伙伴们应该被Manus刷屏了,铺天盖地的体验解读文章接踵而来,比如「数字生命卡兹克」凌晨爆肝的热文:「一手体验首款通用Agent产品Manus」.从公众号.朋友圈.抖音.央媒,都能看到Ma ...
- AI编程:最疯狂的MCP服务器你一定要试试
我还记得我第一次听说MCP(模型上下文协议)的时候,我心想: "哈?又一个花里胡哨的缩写,这个世界已经快被这些缩写淹没了!" 但当我意识到MCP就像AI界的通用连接器--就像USB ...
- go 限流器 rate
前言 Golang 官方提供的扩展库里就自带了限流算法的实现,即 golang.org/x/time/rate.该限流器也是基于 Token Bucket(令牌桶) 实现的. 限流器的内部结构 tim ...
- 安装调用.so文件
博客地址:https://www.cnblogs.com/zylyehuo/ 使用 pwd 命令找到 .so 文件 首先使用 pwd 命令找到要安装的 .so 文件.通过使用此命令打印当前工作目录来找 ...
- Linux中查看进程状态信息
一.常用命令总结 ps -l 列出与本次登录有关的进程信息: ps -aux 查询内存中进程信息: ps -aux | grep *** 查询***进程的详细信息: t ...
- MySQL 创建数据库并指定字符集编码
备忘 CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_general_ci; GRANT ALL ON mydb.* TO "use ...
- FDMemtable如何增加一条自身复制的记录
procedure TFrame_Bill.CopyARecord; var lAFDmemtable : TFDMemTable; begin {$REGION '增加一条复制的记录'} try l ...
- Rubymine搭建Ruby开发环境
1.下载和安装Ruby 下载链接:https://rubyinstaller.org/downloads/ 安装示意图: 注意勾选图示的两个选项 安装完成后在cmd窗口运行:ruby -v命令显示当前 ...