我找到了一个关于"笔画宽度估计"的算法。该算法的目的是估计将用作打开和关闭操作的内核或结构元素的大小。我试图在opencv中实现它。该算法,我采用Mou-Yen Chen的期刊和#34;离线手写单词识别使用隐马尔可夫模型类型随机网络" :
这是示例图像,我已经二值化了:
https://drive.google.com/open?id=0B_g1PNBVdIpGM1EyU0lNdHd1ZU0
第一步,我的代码:
int numOfBlack = 0;
int numOfRun = 0;
for(int i=0;i<thresholdImg.cols;i++){
for(int j=0;j<thresholdImg.rows;j++){
if(thresholdImg.at<uchar>(j,i)==0){
numOfBlack++;
if((j+1)<thresholdImg.rows){
if(thresholdImg.at<uchar>(j+1,i)>0){
numOfRun++;
}
}
}
}
}
第二步,我的代码:
double maxWidth = ((numOfBlack*1.0)/(numOfRun*1.0))*1.5;
第三步,我不知道怎么做,基本上我想是这样的:
int numOfBlack2 = 0;
int numOfRun2 = 0;
for(int i=0;i<thresholdImg.cols;i++){
int coba = 0;
int cobaRun = 0;
for(int j=0;j<thresholdImg.rows;j++){
if(thresholdImg.at<uchar>(j,i)==0){
coba++;
if((j+1)<thresholdImg.rows){
if(thresholdImg.at<uchar>(j+1,i)>0){
cobaRun++;
}
}
}
}
cout<<cobaRun<<endl;
if((cobaRun*1.0<=maxWidth)){
numOfBlack2+=coba;
numOfRun2+=cobaRun;
}
}
第四步:
double strokeWitdth = ((numOfBlack2*1.0)/(numOfRun2*1.0));
实际上,我在第三步中感到困惑。谁能帮我 ?因为我完全陷入了第三步。 感谢