计算 LBP 特征

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <opencv2/features2d/features2d.hpp>
// 计算原始LBP特征
cv::Mat OLBP(cv::Mat& srcImage)
{
	const int nRows = srcImage.rows;
	const int nCols = srcImage.cols;
	cv::Mat resultMat(srcImage.size(), srcImage.type());
	// 遍历图像,生成LBP特征
	for (int y = 1; y < nRows - 1; y++)
	{
		for (int x = 1; x < nCols - 1; x++)
		{
			// 定义邻域
			uchar neighbor[8] = { 0 };
			neighbor[0] = srcImage.at<uchar>(y - 1, x - 1);
			neighbor[1] = srcImage.at<uchar>(y - 1, x);
			neighbor[2] = srcImage.at<uchar>(y - 1, x + 1);
			neighbor[3] = srcImage.at<uchar>(y, x + 1);
			neighbor[4] = srcImage.at<uchar>(y + 1, x + 1);
			neighbor[5] = srcImage.at<uchar>(y + 1, x);
			neighbor[6] = srcImage.at<uchar>(y + 1, x - 1);
			neighbor[7] = srcImage.at<uchar>(y, x - 1);
			// 当前图像的处理中心 
			uchar center = srcImage.at<uchar>(y, x);
			uchar temp = 0;
			// 计算LBP的值 
			for (int k = 0; k < 8; k++)
			{
				// 遍历中心点邻域
				temp += (neighbor[k] >= center)* (1 << k);
			}
			resultMat.at<uchar>(y, x) = temp;
		}
	}
	return resultMat;
}
int main()
{
	cv::Mat srcImage = cv::imread("22.jpg", 0);
	if (!srcImage.data)
		return 0;
	cv::Mat resultMat = OLBP(srcImage);
	cv::imshow("srcImage", srcImage);
	cv::imshow("resultMat", resultMat);
	cv::waitKey(0);
	return 0;
}



转载:http://blog.csdn.net/zhuwei1988

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值