Java使用opencv提取人脸后获得LBP图像

博客围绕人脸识别展开,涉及提取人脸、计算LBP图像等操作。虽因项目含服务器信息未托管代码,但给出了核心的LBP处理代码,运用到了LBP和OpenCV技术,还关联人脸识别与表情识别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

结果大概是这样:
原本的图片如果是这样的:

那么提取人脸之后是这样的:

然后计算LBP图像是这样的:

因为项目中设计到服务器信息, 没有托管代码, 核心的LBP处理代码如下:

    public int[] getLbpHistogram(Mat face){
        Mat lbpface = new Mat(new Size(198,198), CvType.CV_32SC3);
        int width = face.width();
        int height = face.height();
        //initialize the lbp histogram
        int[] lbpHistogram = new int[256];
        Arrays.fill(lbpHistogram,0);
        for(int i = 0; i<width; i++){
            for(int j = 0;j<height; j++){
                //boundary solution
                if(i==0||j==0||i==width-1||j==height-1){
                    lbpface.put(i,j,new int[]{0,0,0});
                    continue;
                }
                int l = 0;
                if(face.get(i-1,j-1)[0]>face.get(i, j)[0]) l+=1<<7;
                if(face.get(i-1,j)[0]>face.get(i, j)[0]) l+=1<<6;
                if(face.get(i-1,j+1)[0]>face.get(i, j)[0]) l+=1<<5;
                if(face.get(i,j+1)[0]>face.get(i, j)[0]) l+=1<<4;
                if(face.get(i+1,j+1)[0]>face.get(i, j)[0]) l+=1<<3;
                if(face.get(i+1,j)[0]>face.get(i, j)[0]) l+=1<<2;
                if(face.get(i+1,j-1)[0]>face.get(i, j)[0]) l+=1<<1;
                if(face.get(i,j-1)[0]>face.get(i, j)[0]) l+=1;
                //fill the lbp image
                lbpface.put(i, j, new int[]{l,l,l});
                //calc the lbp histogram
                lbpHistogram[l]++;
            }
        }
            Imgcodecs.imwrite("out.jpg",lbpface);
        return lbpHistogram;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值