level 1
刘缄55
楼主
在安卓上进行图像处理,输入参数为一灰度图,返回LBP图,为什么处理一张300*300的图像要10秒左右,C++实现的话,1秒都不要,代码贴在下面,有没有什么建议改进的?
private Mat l
bp
_eye(Mat mROI){
Mat lbp_image=new Mat(mROI.rows()-2,mROI.cols()-2,CvType.CV_16UC1);
lbp_image.setTo(new Scalar(0));
for(int i=1;i<mROI.rows()-1;i++){
for(int j=1;j<mROI.cols()-1;j++){
double lbp_center=mROI.get(i,j)[0];
double lbp_center_7=mROI.get(i-1,j-1)[0];
double lbp_center_6=mROI.get(i-1,j)[0];
double lbp_center_5=mROI.get(i-1,j+1)[0];
double lbp_center_4=mROI.get(i,j+1)[0];
double lbp_center_3=mROI.get(i+1,j+1)[0];
double lbp_center_2=mROI.get(i+1,j)[0];
double lbp_center_1=mROI.get(i+1,j-1)[0];
double lbp_center_0=mROI.get(i,j-1)[0];
short code=0;
code|=(is_bigger(mROI.get(i-1,j-1)[0],lbp_center))<<7;
code|=(is_bigger(lbp_center_6,lbp_center))<<6;
code|=(is_bigger(lbp_center_5,lbp_center))<<5;
code|=(is_bigger(lbp_center_4,lbp_center))<<4;
code|=(is_bigger(lbp_center_3,lbp_center))<<3;
code|=(is_bigger(lbp_center_2,lbp_center))<<2;
code|=(is_bigger(lbp_center_1,lbp_center))<<1;
code|=(is_bigger(lbp_center_0,lbp_center))<<0;
short buff[]={code};
lbp_image.put(i-1,j-1,buff);
}
}
return lbp_image;
}
private int is_bigger(double a,double b){
if(a>=b){
return 1;
}
else {
return 0;
}
}
2017年04月30日 14点04分
1
private Mat l
bp
_eye(Mat mROI){
Mat lbp_image=new Mat(mROI.rows()-2,mROI.cols()-2,CvType.CV_16UC1);
lbp_image.setTo(new Scalar(0));
for(int i=1;i<mROI.rows()-1;i++){
for(int j=1;j<mROI.cols()-1;j++){
double lbp_center=mROI.get(i,j)[0];
double lbp_center_7=mROI.get(i-1,j-1)[0];
double lbp_center_6=mROI.get(i-1,j)[0];
double lbp_center_5=mROI.get(i-1,j+1)[0];
double lbp_center_4=mROI.get(i,j+1)[0];
double lbp_center_3=mROI.get(i+1,j+1)[0];
double lbp_center_2=mROI.get(i+1,j)[0];
double lbp_center_1=mROI.get(i+1,j-1)[0];
double lbp_center_0=mROI.get(i,j-1)[0];
short code=0;
code|=(is_bigger(mROI.get(i-1,j-1)[0],lbp_center))<<7;
code|=(is_bigger(lbp_center_6,lbp_center))<<6;
code|=(is_bigger(lbp_center_5,lbp_center))<<5;
code|=(is_bigger(lbp_center_4,lbp_center))<<4;
code|=(is_bigger(lbp_center_3,lbp_center))<<3;
code|=(is_bigger(lbp_center_2,lbp_center))<<2;
code|=(is_bigger(lbp_center_1,lbp_center))<<1;
code|=(is_bigger(lbp_center_0,lbp_center))<<0;
short buff[]={code};
lbp_image.put(i-1,j-1,buff);
}
}
return lbp_image;
}
private int is_bigger(double a,double b){
if(a>=b){
return 1;
}
else {
return 0;
}
}