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;

}

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java set 排序的_Set集合排序

    java set 排序的_Set集合排序TreeSet使用元素的自然顺序对元素进行排序,或者根据创建set时提供的Comparator进行排序,具体取决于使用的构造方法。通俗一点来说,就是可以按照排序后的列表显示,也可以按照指定的规则排序。Setset=newTreeSet();set.add(“f”);set.add(“a”);set.add(“b”);set.add(“c”);set.add(“d”);set.add(“e”…

  • 图像数字化的两种方式是_图像是如何数字化的

    图像数字化的两种方式是_图像是如何数字化的将图片存储为数据有两种方案。其一为位图,也被称为光栅图。即是以自然的光学的眼光将图片看成在平面上密集排布的点的集合。每个点发出的光有独立的频率和强度,反映在视觉上,就是颜色和亮度。这些信息有不同的

  • 创建数组的两种方式

    创建数组的两种方式1.通过构造函数创建数组1.1let变量名称=newArray(size)//创建一个指定大小的数组1.2let变量名称=newArray()//创建一个空的数组1.3let变量名称=newArray(data1,data2,…)//创建一个带数据的数组2.通过字面量创建数组2.1 let变量名称=[]创建一个空数组…

  • mapGetters工具函数

    mapGetters工具函数来自https://vuefe.cn/vuex/getters.html#mapGetters-工具函数mapGetters工具函数会将store中的getter映射到局部计算属性中。import{mapGetters}from‘vuex’exportdefault{computed:{…mapGetters([//使用对象扩展操作符把getter混入到comp

  • 打包报错:Generate Signed APK: Errors while building APK. You can find the errors in the ‘Messages‘ view.

    打包报错:Generate Signed APK: Errors while building APK. You can find the errors in the ‘Messages‘ view.

  • JAVA8 中的flatmap

    JAVA8 中的flatmap构建对象classUser{privateStringaddr}将多个User集合中的addr按照;分割合并成一个字符串listList<User>uList=Lists.newArrayList();Useru1=newUser();u1.setAddr(“a1;a2;a3;a4;a5”);…

发表回复

您的电子邮箱地址不会被公开。

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