Advertisement

LBP图像特征提取

阅读量:

理论部分可参考:
https://www.cnblogs.com/mikewolf2002/p/3438698.html
代码实现如下:

复制代码
    #include<opencv.hpp>  
    
    using namespace cv;
    using namespace std;
    
    int sign(int num1, int num2)
    {
    	if (num1 >= num2)
    		return 1;
    	
    	return 0;
    }
    
    //LBP 模板大小为3*3
    void LBP(const Mat & src, Mat & dst)
    {
    	if (!src.data)
    		return;
    	
    	for (int u = 0; u < src.rows;u++)
    	for (int v = 0; v < src.cols;v++)
    	{
    		
    		if (u - 1 >= 0 && v - 1 >= 0 && u + 1 < src.rows && v + 1 < src.cols)
    		{
    			int FirC = dst.at<Vec3b>(u, v)[0];
    			int SecC = dst.at<Vec3b>(u, v)[1];
    			int ThiC = dst.at<Vec3b>(u, v)[2];
    			dst.at<Vec3b>(u, v)[0] = 128 * sign(src.at<Vec3b>(u - 1, v - 1)[0], FirC) + 64 * sign(src.at<Vec3b>(u - 1, v)[0], FirC) + 32 * sign(src.at<Vec3b>(u - 1, v + 1)[0], FirC) +
    				16 * sign(src.at<Vec3b>(u, v + 1)[0], FirC) + 8 * sign(src.at<Vec3b>(u + 1, v + 1)[0], FirC) + 4 * sign(src.at<Vec3b>(u+1, v)[0], FirC) +
    				2 * sign(src.at<Vec3b>(u + 1, v - 1)[0], FirC) + sign(src.at<Vec3b>(u , v - 1)[0], FirC);
    			dst.at<Vec3b>(u, v)[1] = 128 * sign(src.at<Vec3b>(u - 1, v - 1)[1], FirC) + 64 * sign(src.at<Vec3b>(u - 1, v)[1], FirC) + 32 * sign(src.at<Vec3b>(u - 1, v + 1)[1], FirC) +
    				16 * sign(src.at<Vec3b>(u, v + 1)[1], FirC) + 8 * sign(src.at<Vec3b>(u + 1, v + 1)[1], FirC) + 4 * sign(src.at<Vec3b>(u + 1, v)[1], FirC) +
    				2 * sign(src.at<Vec3b>(u + 1, v - 1)[1], FirC) + sign(src.at<Vec3b>(u, v - 1)[1], FirC);
    			dst.at<Vec3b>(u, v)[2] = 128 * sign(src.at<Vec3b>(u - 1, v - 1)[2], FirC) + 64 * sign(src.at<Vec3b>(u - 1, v)[2], FirC) + 32 * sign(src.at<Vec3b>(u - 1, v + 1)[2], FirC) +
    				16 * sign(src.at<Vec3b>(u, v + 1)[2], FirC) + 8 * sign(src.at<Vec3b>(u + 1, v + 1)[2], FirC) + 4 * sign(src.at<Vec3b>(u + 1, v)[2], FirC) +
    				2 * sign(src.at<Vec3b>(u + 1, v - 1)[2], FirC) + sign(src.at<Vec3b>(u, v - 1)[2], FirC);
    		}
    		else
    		{
    			dst.at<Vec3b>(u, v)[0] = src.at<Vec3b>(u, v)[0];
    			dst.at<Vec3b>(u, v)[1] = src.at<Vec3b>(u, v)[1];
    			dst.at<Vec3b>(u, v)[2] = src.at<Vec3b>(u, v)[2];
    		}
    	}
    }
    int main()
    {
    
    	cv::Mat image1, image2;
    
    	image1 = cv::imread("F:\ ebook\ opencv\ LearningOpenCV3\ test\ test\ lenna.bmp");
    	cv::Mat resultimage(image1.rows,image1.cols,CV_8UC3);
    
    	namedWindow("原始图像", WINDOW_AUTOSIZE);
    	cv::imshow("原始图像", image1);
    	cv::waitKey(0);
    
    	//LBP特征提取
    	LBP(image1, resultimage);
    
    	namedWindow("LBP图像", WINDOW_AUTOSIZE);
    	cv::imshow("LBP图像", resultimage);
    	cv::waitKey(0);
    
    	cv::imwrite("LBP图像.jpg", resultimage);
    	return 0;
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
在这里插入图片描述

全部评论 (0)

还没有任何评论哟~