- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Opencv4 (C++)案例5 :采取纯编码不调⽤任何api的⽅式找⼗字中⼼点
需求分析
给出⼀幅单通道灰度图的全部灰度值,要求采⽤原⽣C++的办法对图像的像素点进⾏处理,找到这幅图中的⼗字中⼼点的坐标.
思路分析
实际上,这个问题是考察我们如何不⽤Opebcv的api来处理这个函数,考察opencv⼀些重要接⼝的底层原理或者是数字图像处理的⼀些基本
算法。那么在这个问题中,基本思路就是区分背景⾊和物体⾊,找到⼀个阈值,将其⼆值化,将背景⾊设置为255,物体⾊设置为0,然后中⼼点
的计算,⾮常简单,找到最左端灰度值为0的,依次思路找上下右,找出来mid=x:(top+down)/2 y:(left+right)/2 这就是基本思路
这道题的另外⼀个思路就是取前百分之x的像素点作为阈值的取值点,在C++中重载⼀下cmp函数到sort⾥⾯去就可以⽤了
编码
我的编码思路就是先对⼆维数组进⾏⼆值化,然后计算,设置⼆值化的思路是采⽤灰度分布直⽅图的⽅法,计算出现最⾼的灰度值,然后根据此
为阈值⼆值化图像,注意,由于原图的问题,存在⼀些模糊和灰暗度的问题,因此阈值会出现⼀些问题,需要微调,直到我们调到⼀个合适的
范围(可以借助Opencv的图像显⽰来调整)
AC代码
1 #include stdio.h
2 #include math.h
3 #include vector
4 #include iostream
5 #include algorithm
6
7 using namespace std ;
8
9 const int srcRow=128;
10 const int srcCol=128;
11
12 void handle(int pic[][128],double a,double b){
13 //1.⼗字架不⼀定⽔平与垂直
14 //2.存在模糊
15 //3. 明暗度不同
16
17 阈值化分割灰度图像阈值化分割
// :
18 //1.设置好计算的参数
19 double nHistogram[256];//灰度分布直⽅图
20 double dVariance[256];//类间⽅差
21 int sumPic=srcRow*srcCol;
22 for(int i=0;i256;i++){
23 nHistogram[i]=0.0;
24 dVariance[i]=0.0;
25 }
26
27 //2.对每⼀个像素点进⾏归类
28 for(int i=0;isrcRow;i++){
29 for(int j=0;jsrcCol;j++){
30 nHistogram[pic[i][j]]++;//计算出频度
31 }
32 }
33
34 //3.根据频度计算出概率
35 double Pa=0.0;//背景出现的频率
36 double Pb=0.0;//⼗字出现的频率
37 double Wa=0.0;//背景平均灰度
38 double Wb=0.0;// ⽬标平均灰度
39 double W0=0.0;//全局平均灰度
40 double dData1=0.0,dData2=0.0;
41 for(int i=0;i256;i++){
42 nHistogram[i] /= sumPic;//计算出频率
42 nHistogram[i] /= sumPic;//计算出频率
43 W0 += i*nHistogram[i];
44 }
45
46 对每个灰度值计算类间⽅差
//4.
47 for(int i=0;i256;i++){
48 Pa += nHistogram[i];
49 Pb = 1-Pa;
50 dD
文档评论(0)