Qt图像处理技术四:图像二值化

github

如果你觉得有用的话,期待你的小星星

实战应用项目:
github :https://github.com/dependon/simple-image-filter //纯qt图像处理项目(包括多种滤镜)

效果


原理

rgb
每一点取rgb的平均值,
当平均值>128,设置点为255,255,255
当平均值<128,设置点为0,0,0

源码(容易理解版)

QImage Binaryzation(const QImage &origin)
{
int width = origin.width();
int height = origin.height();
QImage newImg = QImage(width, height, QImage::Format_RGB888); for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
int gray = qGray(origin.pixel(x, y));
int newGray;
if (gray > 128)
newGray = 255;
else
newGray = 0;
newImg.setPixel(x, y, qRgb(newGray, newGray, newGray));
}
}
return newImg;
}

源码(相对上述源码快5-20倍,因为绕过了Qt每个取点的检测)

QImage Binaryzation(const QImage &img)
{
QImage imgCopy; if (img.format() != QImage::Format_RGB888) {
imgCopy = QImage(img).convertToFormat(QImage::Format_RGB888);
} else {
imgCopy = QImage(img);
}
uint8_t *rgb = imgCopy.bits();
int newGray = 0;
int gray = 0;
int size = img.width() * img.height();
for (int i = 0; i < size ; i++) {
gray = (rgb[i * 3] + rgb[i * 3 + 1] + rgb[i * 3 + 2]) / 3;
if (gray > 128)
newGray = 255;
else
newGray = 0;
rgb[i * 3] = newGray;
rgb[i * 3 + 1] = newGray;
rgb[i * 3 + 2] = newGray;
}
return imgCopy;
}

Qt图像处理技术四:图像二值化的更多相关文章

  1. Win8MetroC#数字图像处理--2.2图像二值化函数

    原文:Win8MetroC#数字图像处理--2.2图像二值化函数 [函数代码] /// <summary> /// Binary process. /// </summary> ...

  2. Win8 Metro(C#)数字图像处理--2.59 P分位法图像二值化

    原文:Win8 Metro(C#)数字图像处理--2.59 P分位法图像二值化  [函数名称]   P分位法图像二值化 [算法说明]   所谓P分位法图像分割,就是在知道图像中目标所占的比率Rat ...

  3. Win8 Metro(C#)数字图像处理--2.55OSTU法图像二值化

    原文:Win8 Metro(C#)数字图像处理--2.55OSTU法图像二值化  [函数名称] Ostu法图像二值化      WriteableBitmap OstuThSegment(Writ ...

  4. Win8 Metro(C#)数字图像处理--2.56简单统计法图像二值化

    原文:Win8 Metro(C#)数字图像处理--2.56简单统计法图像二值化  [函数名称] 简单统计法图像二值化 WriteableBitmap StatisticalThSegment(Wr ...

  5. Win8 Metro(C#)数字图像处理--2.57一维最大熵法图像二值化

    原文:Win8 Metro(C#)数字图像处理--2.57一维最大熵法图像二值化  [函数名称] 一维最大熵法图像二值化WriteableBitmap EntropymaxThSegment(Wr ...

  6. Win8 Metro(C#)数字图像处理--2.58双峰法图像二值化

    原文:Win8 Metro(C#)数字图像处理--2.58双峰法图像二值化  [函数名称]   双峰法图像二值化 WriteableBitmap  PeakshistogramThSegment( ...

  7. Win8 Metro(C#)数字图像处理--2.54迭代法图像二值化

    原文:Win8 Metro(C#)数字图像处理--2.54迭代法图像二值化  [函数名称]   迭代法图像二值化      int IterativeThSegment(WriteableBitm ...

  8. Python+OpenCV图像处理(十)—— 图像二值化

    简介:图像二值化就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程. 一.普通图像二值化 代码如下: import cv2 as cv import numpy ...

  9. 致敬学长!J20航模遥控器开源项目计划【开局篇】 | 先做一个开机界面 | MATLAB图像二值化 | Img2Lcd图片取模 | OLED显示图片

    我们的开源宗旨:自由 协调 开放 合作 共享 拥抱开源,丰富国内开源生态,开展多人运动,欢迎加入我们哈~ 和一群志同道合的人,做自己所热爱的事! 项目开源地址:https://github.com/C ...

  10. C# 指针操作图像 二值化处理

    /// <summary> /// 二值化图像 /// </summary> /// <param name="bmp"></param& ...

随机推荐

  1. 别再混淆了!JVM内存模型和Java内存模型的本质区别

    JVM 内存模型(JVM Memory Model)和 Java 内存模型(Java Memory Model, JMM)是 Java 开发中两个非常重要的概念,但这两个概念很容易被搞混,所以本文就来 ...

  2. ppt 实用技巧总结

    全是图片且颜色单一 解决方案:在图片上添加图形,加图标 效果图 2.文本功能10个 解决方案:添加背景图片+文本+图标 效果图 只有文本 没有过多内容怎么办

  3. 如何解决ubuntu安装第三方deb出现的read unknown VMA问题(SUID sandbox配置问题)

    前言 众所不周知,ubuntu的snap有些让人无语凝噎的问题,比方说如果你在Ubuntu 24.04 LTS通过它安装vscode,恭喜你,你无法在vscode中输入中文,缘由不明,又或者对于str ...

  4. The selected directory is not a valid home for Go SDK

    前言 The selected directory is not a valid home for Go SDK 出现这个错误的原因是 idea 的 Go-plugin 插件,和 Go 的sdk版本不 ...

  5. 用Docker Swarm实现容器服务高可用

    背景与技术选择 根据我之前的几篇「Django 系列」文章,后端架构中我使用了 Django + Celery + RabbitMQ 三个框架/服务.现在有几个问题: 如何用容器快速部署这三个应用? ...

  6. [源码系列:手写spring] IOC第八节:BeanFactoryPostProcessor和BeanPostProcessor

    内容介绍 BeanFactoryPostProcessor和BeanPostProcessor是spring中具有重量级地位的两个接口,理解了这两个接口的主要作用,基本就理解Spring的核心原理了. ...

  7. [每日算法] leetcode第3题:无重复字符的最长子串

    leetcode第3题入口 题目描述 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: s = "abcabcbb" 输出: 3 解法1: ...

  8. SQL Server 5105 和 1802 错误的触发方式和解决方式之一

    一般导致这两个错误的原因是:文件路径错误 还有的说,可能是文件权限问题,详情见权限错误纠正方式 错误代码 create database teaching on primary ( name = te ...

  9. System V信号量 vs. POSIX信号量:核心区别与选型指南

    System V信号量 vs. POSIX信号量:核心区别与选型指南 最近在学习linux系统编程的章节,接触到了两种信号量,所以专门研究了二者的区别,将二者的对比记录于此. 在Linux多线程/进程 ...

  10. addAll(Collection<? extends E> c)的方法源码

    public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess ...