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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • javaweb教务管理系统源码_java做一个学生管理系统

    javaweb教务管理系统源码_java做一个学生管理系统刚学完javaweb,做个项目练手与巩固所学的知识,同时分享自己写的这个教务管理系统,同样也是为自己记下笔记。为以后复习有帮助。该系统没有用到框架的知识,一共花了7天写出来。所以非常适合javaweb初学者教务管理系统javaweb项目运行环境:window系统,ApacheTomcatv7.0.84、JDK1.8开发环境:J2EEeclipse、navicatformysql运用的技术…

    2022年10月16日
    5
  • python 去除字符串两端的引号[通俗易懂]

    python 去除字符串两端的引号[通俗易懂]使用遥感影像头文件时,需要获得里面的日期和时间信息,得到的字符串两端带有双引号,可以使用eval()函数去除。a='”srting”‘print(a)b=eval(a)print(b)结果:”srting”srting

    2022年6月9日
    129
  • pytest重试_手机qq插件加载失败

    pytest重试_手机qq插件加载失败安装:pip3installpytest-rerunfailures重新运行所有失败用例要重新运行所有测试失败的用例,请使用–reruns命令行选项,并指定要运行测试的最大次数:$py

    2022年7月31日
    8
  • redis端口号为什么是6379「建议收藏」

    redis端口号为什么是6379「建议收藏」6379在是手机按键上MERZ对应的号码,而MERZ取自意大利歌女AlessiaMerz的名字。MERZ长期以来被Redis作者antirez及其朋友当作愚蠢的代名词。后来Redis作者在开发Redis时就选用了这个端口。——AlessiaMerz是一位意大利舞女、女演员。Redis作者Antirez早年看电视节目,觉得Merz在节目中的一些话愚蠢可笑,Antirez喜欢造…

    2022年5月30日
    231
  • 异步fifo的10个测试关注点_异步FIFO

    异步fifo的10个测试关注点_异步FIFO1、异步FIFO简介及其原理FIFO是英文FirstInFirstOut的缩写,是一种先进先出的数据缓存器,它与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据。异步FIFO是指读写时钟不一致,读写时钟是互相独立的。1.1用途用途1:  跨时钟域:异步FIFO读写分别采用相互异步的不同时钟。在现代集成电路芯片中,随着设计规模的不断扩大,一个系统中往往含有数个时钟,多时钟域带来的一个问题就是,如何设计异步时钟之间的接口电路。异步FIFO是这个问题的一

    2022年8月13日
    6
  • 用js写简单选项卡

    用js写简单选项卡如图,最简单的纯粹的选项卡第一步,当然是先写html代码和css样式<!DOCTYPEhtml><html><head><metacharset=&quo

    2022年7月2日
    28

发表回复

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

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