二值化每次都要调阈值,很头疼,实现一个不依赖OpenCV库的动态二值化算法很有必要。
测试了
参考文献
论文链接
更详细的算法解释
效果如下:

达到了预期的效果。

主要实现代码记录一下。

void MainWindow::BalancedThresholding()
{QImage pos = img;QRgb *bin = (QRgb *)pos.scanLine(0);QRgb *pixels = (QRgb *)img.scanLine(0);QRgb threadw = qRgb(255,255,255);QRgb threadb = qRgb(0,0,0);int w = img.width();int h = img.height();int index = 0;int count = 0;long sum = 0;int x1,x2,y1,y2;int S = w/8.0;int s2 = S/2;double T = 0.15;unsigned long* integralImg = 0;integralImg = (unsigned long*)malloc(w*h*sizeof(unsigned long*));for(int i =0;i<w;i++){sum = 0;for(int j=0;j<h;j++){index = j*w+i;sum += qGray(pixels[index]);if(i==0)integralImg[index] = sum;elseintegralImg[index] = integralImg[index-1] + sum;}}for(int i =0;i<w;i++){sum = 0;for(int j=0;j<h;j++){index = j*w+i;x1 = i-s2;x2 = i+s2;y1 = j-s2;y2 = j+s2;if(x1<0)x1=0;if(x2>=w) x2=w-1;if(y1<0) y1=0;if(y2>=h) y2 = h-1;count = (x2-x1)*(y2-y1);sum = integralImg[y2*w+x2] - integralImg[y1*w+x2] - integralImg[y2*w +x1] + integralImg[y1*w+x1];if((long)(qGray(pixels[index])*count) < (long)(sum*(1.0-T))){bin[index] = threadb;}else{bin[index] = threadw;}}}free (integralImg);ui->labelDest->setPixmap(QPixmap::fromImage(pos));
}

这里使用了自己熟悉的Qt,如果需要跨平台,可以使用stb_img库来读写图片,可以摆脱各种大框架的捆绑。

C++实现自适应二值化相关推荐

  1. 利用python opencv实现图像自适应二值化

    对灰度图像利用阈值得到一个二值化的图像,是常最常用的图像处理技术之一.例如,灰度大于127的图像设置为1.小于127的设置为0,这种处理便是固定阈值127的二值化处理. 自适应的二值化处理不同于固定阈 ...

  2. input自适应_【正点原子FPGA连载】第十一章基于OV5640的自适应二值化实验-领航者ZYNQ之HLS 开发指南...

    1)摘自[正点原子]领航者ZYNQ之HLS 开发指南 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手 ...

  3. vc++数字图像处理 自适应二值化程序

    这段时间做图像处理,这是用迭代法求阈值的,自适应二值化代码,贴出来希望对大家有帮助 void GrayTrans::Binary() { long i,j; unsigned char pixel; ...

  4. opencv自适应二值化原理

    opencv自适应二值化原理 先对图像做模糊处理(一般是均值或者高斯模糊).(这里可以加上自己的操作,做一些其他类型的模糊以及一些形态学的操作). 用原图与模糊处理之后的图像做差得到一幅图像. 判断图 ...

  5. OpenCV二值化cvThreshold和自适应二值化cvAdaptiveThreshold及Otsu

    阈值化函数: double cvThreshold(constCvArr* src, CvArr* dst, double threshold, double max_value,int thresh ...

  6. emgucv自适应二值化

    一.理论概述(转载自<OpenCV_基于局部自适应阈值的图像二值化>) 局部自适应阈值则是根据像素的邻域块的像素值分布来确定该像素位置上的二值化阈值.这样做的好处在于每个像素位置处的二值化 ...

  7. OpenCV自适应二值化

    关于直方图的理解:http://blog.csdn.net/sheldonwxp/article/details/7693541 //全局自适应方法 double threshold( InputAr ...

  8. K210 / Openmv实现 大津法/Otsu最大类间方差法 自适应二值化

    目录 源码 效果 平台:K210 固件版本:maixpy_v0.6.2_54_g897214100_openmv_kmodel_v4_with_ide_support.bin OpenMv库自带Ots ...

  9. 【OpenCV 4开发详解】图像二值化

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

最新文章

  1. Serv-U搭建FTP服务器
  2. 三个数据集与deploy.prototxt
  3. Asp.net基础概念之 事件
  4. 数据库-MySQL-Java数据库连接-JDBC
  5. mysql引擎innodb与ndb比较_mysql存储引擎InnoDB 1.1、NDB 7.5对比
  6. 用正则表达式生成文章的目录大纲
  7. 打字游戏html代码,JavaScript打字小游戏代码
  8. Arduino实验二十五 超声波传感器测距实验
  9. 写一篇靠谱的方案设计文档-之实践问题清单
  10. shortcutwebsite
  11. Unity中使用模板测试模拟Mask组件效果
  12. 增加PRODUCT_BOOT_JARS及类 提供jar包给应用
  13. 第二证券|A股集体收涨,汽车产业链爆发!房地产延续强势
  14. 浅析服装信息化面前的三座大山
  15. 理解echo openssl概念、用法、常用参数
  16. C++ 类与对象_类的其他成员(常成员,静态成员,友元)
  17. 又一所“省会大学”,来了!
  18. 欧几里得数据与非欧几里得数据
  19. 集算器入门之安装与基本使用
  20. 整个链表的逆序实现及部分链表的逆序实现(C++)

热门文章

  1. VBA中的数据类型转换
  2. 公有云——阿里云ECS服务器(IaaS)
  3. 如何修改数据库名字.sql文件
  4. NestedVAE: Isolating Common Factors via Weak Supervision.
  5. 上线半天下载量破100W!美团大佬的Java性能调优实战手册,超详细
  6. python之元组(tuple)详细介绍
  7. 涛涛车业通过注册:半年营收7.7亿同比降16% 拟募资6亿
  8. EM算法的理解--以抛硬币为例
  9. sql DATEPART函数使用
  10. 浙大 matlab 免费,浙大 | 新生大礼包