//
//输入:
// image: 灰度图像
// dst:边缘图像
// edge_hist_feature:边缘直方图特征
// #define EDGE_HIST_SIZE 16
// double edge_feature[EDGE_HIST_SIZE];
int calEdgeHistogram(IplImage *image,IplImage * dst,double * edge_hist_feature)
{
if(NULL == image || NULL == edge_hist_feature)
return 1;
CvHistogram *hist = 0; // 直方图
IplImage* canny;//边缘图像
IplImage* gradient_im;
IplImage* dx; // x方向的sobel差分
IplImage* dy; // y方向的sobel差分
CvMat* canny_m;
CvMat* gradient; // 梯度值
CvMat* gradient_dir; //梯度的方向
CvMat* dx_m; //
CvMat* dy_m;
CvMat* mask;
CvSize size;
int i,j;
float theta;
float max_val;
int hdims = EDGE_HIST_SIZE; // 划分HIST的个数,越高越精确
float hranges_arr[] = {-PI/2,PI/2}; // 直方图的上界和下界
float* hranges = hranges_arr;
size = cvGetSize(image);
canny = cvCreateImage(cvGetSize(image),8,1);//边缘图像
dx = cvCreateImage(cvGetSize(image),32,1);//x方向上的差分
边缘方向直方图
最新推荐文章于 2023-05-20 07:00:00 发布
该段代码展示了如何使用OpenCV库计算图像的边缘方向直方图。通过Canny边缘检测获取边缘图像,然后应用Sobel算子计算梯度和方向,最后构建并计算直方图,将边缘方向分布量化为特征值。
摘要由CSDN通过智能技术生成