#include <string>
#include<fstream>
#include<iostream>
#include <vector>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
typedef struct _GLCMFeatures
{
_GLCMFeatures()
: energy(0.0)
, entropy(0.0)
, contrast(0.0)
, idMoment(0.0)
{
//this->energy = 0.0;
}
double energy; // 能量
double entropy; // 熵
double contrast; // 对比度
double idMoment; // 逆差分矩, inverse difference moment
} GLCMFeatures;
enum ANGLE
{
GLCM_HORIZATION = 0, // 水平
GLCM_VERTICAL = 1, // 垂直
GLCM_ANGLE45 = 2, // 45度角
GLCM_ANGLE135 = 3 // 135度角
};
// 能量
double energy;
// 熵
double entropy;
// 对比度
double contrast;
// 逆差分矩, inverse difference moment
double idMoment;
// 将灰度共生矩阵划分为 grayLevel 个等级
int m_grayLevel = 16;
// 计算灰度共生矩阵
void calGLCM(Mat inputImg, vector<vector<int>>& vecGLCM, int angle);
// 计算特征值
void getGLCMFeatures(vector<vector<int>>& vecGLCM, GLCMFeatures& features);
// 初始化灰度共生矩阵
void initGLCM(vector<vector<int>>& vecGLCM, int size = 16);
// 计算水平灰度共生矩阵
void getHorisonGLCM(vector<vector<int>>& src, vector<vector<int>>& dst, int imgWidth, int imgHeight);
// 计算垂直灰度共生矩阵
void getVertialGLCM(vector<vector<int>>& src, vector<vector<int>>& dst, int imgWidth, int imgHeight);
// 计算 45 度灰度共生矩阵
void getGLCM45(vector<vector<int>>& src, vector<vector<int>>& dst, int imgWidth, int imgHeight);
// 计算 135 度灰度共生矩阵
void getGLCM135(vector<vector<int>>& src, vector<vector<int>>& dst, int imgWidth, int imgHeight);
int main()
{
for (size_t i = 1; i < 4; i++)
{
string s = "test" + to_string(i) + ".jpg";
Mat img = imread(s, 0);
vector<vector<int>>vec;
GLCMFeatures features;
initGLCM(vec
C++ OPENCV 灰度共生矩阵的生成和利用
最新推荐文章于 2022-07-18 08:30:00 发布