传统功能GLCM尚未在opencv2中执行。我使用以下代码:
#import <opencv2/legacy.hpp>
cv::Mat inputIm = [in_image CVMat];
cv::Mat grayIm = [in_image CVGrayscaleMat];
// cv::cvtColor(inputIm, grayIm, cv::COLOR_RGB2GRAY);
// here I get an error: "no matching function..." !!!
CvGLCM* glcm = cvCreateGLCM(grayIm, 1, NULL, 4, CV_GLCM_OPTIMIZATION_LUT);
cvCreateGLCMDescriptors(glcm, CV_GLCMDESC_OPTIMIZATION_ALLOWDOUBLENEST);
double d = cvGetGLCMDescriptor(glcm, 0, CV_GLCMDESC_HOMOGENITY );
double a = 1; double *ave = &a;
double s = 1; double *sd = &s;
cvGetGLCMDescriptorStatistics(glcm, CV_GLCMDESC_ENERGY, ave, sd);
NSLog(@"ave = %f sd = %f", *ave, *sd);
我已经尝试使用命名空间cv :: CvGLCM * glcm = cv :: cvCreateGLCM(grayIm,.... - 但没有变化:/
非常感谢任何帮助!
答案 0 :(得分:3)
亚历山大·希什科夫(Alexander Shishkov)在此发布的答案最终得到了帮助:link1
我确实交换了texture.cpp代码并再次编译了我的opencv-framework(在此解释:link2:即特别是我重新做了三个的最后一步......)。
尽我所能,我的glcm代码毫无例外地执行,每个glcm方法提供两个数字。
答案 1 :(得分:1)
遗留函数cvCreateGLCM
将较早的IplImage*
作为输入,因此您需要先转换cv::Mat
图像。
试试这个:
// your input image
cv::Mat grayIm = [in_image CVGrayscaleMat];
// create a legacy image
IplImage pGray = grayIm;
// call function
CvGLCM* glcm = cvCreateGLCM(&pGray, 1, NULL, 4, CV_GLCM_OPTIMIZATION_LUT);
答案 2 :(得分:1)
当我在寻找GLCM&#34;在openCV&#34;中实现GLCM Haralick功能时,我发现了这一点,这得到14个纹理特征中的12个