Adaptive thresholding using the integral image

Adaptive thresholding using the integral image#include #include #include#includeusingnamespacestd; voidvvAdaptiveThreshold(IplImage*inImg,IplImage*outImg){intS=inImg->width>>5;intT=10;char*input,*bin;

大家好,又见面了,我是你们的朋友全栈君。#include <opencv2/opencv.hpp>  

#include <opencv2/legacy/compat.hpp> 

#include <opencv2/imgproc/types_c.h>

#include <fstream>

using namespace std;  

void vvAdaptiveThreshold( IplImage* inImg, IplImage* outImg)

{


int S = inImg->width >> 5;


int T = 10;


char *input, *bin;


input = inImg->imageData;


bin = outImg->imageData;


int width = inImg->width;


int height = inImg->height;


unsigned long* integralImg = 0;


int i, j;


long sum=0;


int count=0;


int index;


int x1, y1, x2, y2;


int s2 = S/2;


//bin = new unsigned char[width*height];


// create the integral image


integralImg = (unsigned long*)malloc(width*height*sizeof(unsigned long*));


for (i=0; i<width; i++)


{


// reset this column sum


sum = 0;


for (j=0; j<height; j++)


{


index = j*width+i;


sum += input[index];


if (i==0)


integralImg[index] = sum;


else


integralImg[index] = integralImg[index-1] + sum;


}


}


// perform thresholding


for (i=0; i<width; i++)


{


for (j=0; j<height; j++)


{


index = j*width+i;


// set the SxS region


x1=i-s2; x2=i+s2;


y1=j-s2; y2=j+s2;


// check the border


if (x1 < 0) x1 = 0;


if (x2 >= width) x2 = width-1;


if (y1 < 0) y1 = 0;


if (y2 >= height) y2 = height-1;


count = (x2-x1)*(y2-y1);


// I(x,y)=s(x2,y2)-s(x1,y2)-s(x2,y1)+s(x1,x1)


sum = integralImg[y2*width+x2] –


integralImg[y1*width+x2] –


integralImg[y2*width+x1] +


integralImg[y1*width+x1];


if ((long)(input[index]*count) < (long)(sum*(100-T)/100))


bin[index] = 255;


else


bin[index] = 0;


}


}


free (integralImg);

}

int main()  //欢迎大家加入图像识别技术交流群:271891601

{

// 从文件中加载原图  

//IplImage *pSrcImage1 = cvLoadImage(“adaptive.jpg”, CV_LOAD_IMAGE_UNCHANGED);  

IplImage *pSrcImage1 = cvLoadImage(“ding9.jpeg”, CV_LOAD_IMAGE_UNCHANGED); 

IplImage *pSrcImage = cvCreateImage(cvGetSize(pSrcImage1), IPL_DEPTH_8U,1);

cvCvtColor(pSrcImage1,pSrcImage,CV_BGR2GRAY);//cvCvtColor(src,des,CV_BGR2GRAY)  

//创建输出的图像

IplImage *pOutImage = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U,1);

vvAdaptiveThreshold(pSrcImage,pOutImage);

const char *pstrWindowsATitle = “Adptive Thresholding using the Integral Image”;  

cvNamedWindow(pstrWindowsATitle, CV_WINDOW_AUTOSIZE); 

cvShowImage(pstrWindowsATitle, pOutImage);   

const char *pstrWindowsATitle1 = “origial Image”;  

cvNamedWindow(pstrWindowsATitle1, CV_WINDOW_AUTOSIZE); 

cvShowImage(pstrWindowsATitle1, pSrcImage1);   

cvWaitKey(0); 

//这里记得释放掉不用的资源哦,由于这是测试程序,就不写了,正式的程序一定要写上哦

return 0;

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145877.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mybatis log Plugin 的激活码_通用破解码

    mybatis log Plugin 的激活码_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    887
  • python报错no module named_pycharm报错no module named

    python报错no module named_pycharm报错no module namedpycharm在运行时出现“ModuleNotFoundError:Nomodulenamed‘pygame’”错误的解决方法例如:(出现这样子的错误,再出错的地方点击installpygame后,代码还是会出现上面的错误,这时候,我手动安装之后代码就能正常运行了。)手动安装pygame:通过文件—设置—项目解释器(File-setting-Projectinterpreter),点击“+”,搜索pygame,点击左下角的安装即可。如下图所示:右侧下方点击“+”:在搜索框

    2022年8月27日
    5
  • 微信小程序上传图片失败总结[通俗易懂]

    微信小程序上传图片失败总结[通俗易懂]错误:selfsignedcertificate这个是请求地址需要输第三方认证的域名,这个需要后端人员配置。错误:微信开发工具上可以上传图片,但是到体验版不行提示请求失败这个应该是在微信公众号平台里配置uploadFile合法域名…

    2022年6月18日
    198
  • c语言之字符型数据类型关键字_字符型系统数据类型主要包括

    c语言之字符型数据类型关键字_字符型系统数据类型主要包括字符型数据类型就是字符1、字符数据的表示字符型数据是用单引号括起来的一个字符。例如:’a’、’b’、’=’、’+’、’?’都是合法字符型数据。在C语言中,字符型数据有以下特点:字符型数据只能用单引号括起来,不能用双引号或其它括号。字符型数据只能是单个字符,不能是字符串。字符可以是字符集中任意字符。但数字被定义为字符型之后就不能参与数值运算。如’5’和5是不同的。’5’是字符型数据,不能参与运算。…

    2025年7月11日
    4
  • mybatisCodeHelpe离线激活码【2022.01最新】

    (mybatisCodeHelpe离线激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月31日
    62
  • 列举6个常见且实用的Web前端性能优化方法[通俗易懂]

    列举6个常见且实用的Web前端性能优化方法[通俗易懂]在如今这个信息爆炸的时代,人们的节奏总是快速的,对于一个网站的耐心毕竟是有限的可怜的,如果网站不进行优化必定会流失相当一部分的客户,带来不必要的损失。那么从Web前端的性能优化上来说有哪些常见、实用的方法呢?下面小千就列举6个常见且实用的Web前端性能优化方法。1、使用CDNCDN(内容分发网络)部署在各大运营商机房,当用户通过浏览器请求资源时可以直接反馈给用户,极大的减轻了服务器数据中心的压力。本质上CDN也是一种缓存,如果你的所在地距离某个CDN节点很近,那么网站响应的速度提升也是非常明显的。另外

    2022年6月23日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号