From 827e221f16fc56724f38871ab15ea9af914a5f94 Mon Sep 17 00:00:00 2001 From: wangchunlin Date: Fri, 4 Mar 2022 15:41:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E5=85=B6=E4=BB=96=E5=87=A0?= =?UTF-8?q?=E7=A7=8D=E7=89=B9=E5=BE=81=EF=BC=8C=E4=B8=BB=E8=A6=81=E6=98=AF?= =?UTF-8?q?=E5=AF=B9=E6=AF=94=E5=BA=A6=E6=9C=89=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ImageDetect/CMakeLists.txt | 2 +- ImageDetect/ImageDetect.cxx | 80 +++++++++++++++++++++++++++++++++++-- learn/views.py | 18 ++++++++- 3 files changed, 93 insertions(+), 7 deletions(-) diff --git a/ImageDetect/CMakeLists.txt b/ImageDetect/CMakeLists.txt index b80c509..84916c0 100644 --- a/ImageDetect/CMakeLists.txt +++ b/ImageDetect/CMakeLists.txt @@ -40,7 +40,7 @@ endif (USE_CROSS) project (ImageDetect) # The version number. -set (ImageDetect_VERSION_MAJOR 5) +set (ImageDetect_VERSION_MAJOR 6) set (ImageDetect_VERSION_MINOR 0) # configure a header file to pass some of the CMake settings # to the source code diff --git a/ImageDetect/ImageDetect.cxx b/ImageDetect/ImageDetect.cxx index 9d0bb8f..30340be 100644 --- a/ImageDetect/ImageDetect.cxx +++ b/ImageDetect/ImageDetect.cxx @@ -57,12 +57,84 @@ void detect_saturation(cv::Mat input_img, float& satu) satu = mean.val[0]; } +void detect_graydiff(cv::Mat img, float& CON, float& ASM, float& ENT, float& MEAN) +{ + Mat mi; + int row = img.rows; + int col = img.cols; + //CON=i*i*P(I) + //计算i + mi.create(row, col, img.type()); + for (int i = 0; i < row-1; i++) + for (int j = 0; j < col; j++) + { + //cout << "BEF" << int(img.ptr(i)[j]) << endl; + mi.at(i, j) = img.at(i + 1, j) - img.at(i, j); + //cout << "IMF:" << int(mi.ptr(i)[j]) << endl; + } + //计算p(I) 差值的概率 + int new_cols = mi.cols; + int new_rows = mi.rows; + int gray[256] = { 0 }; + double gray_prob[256] = { 0 }; + int num = 0;// 像素的总个数 + //统计直方图各个像素灰度值 + for (int i = 0; i < mi.rows; i++) + { + uchar *p = mi.ptr(i); + for (int j = 0; j < mi.cols; j++) + { + int value = p[j]; + gray[value]++; + num++; + } + } + //计算直方图概率分布 + for (int i = 0; i < 256; i++) + { + gray_prob[i] = ((double)gray[i] / num); + } + CON = 0.0; + ASM = 0.0; + ENT = 0.0; + MEAN = 0.0; + double v = 1.0/ 255.0; + for (int i = 0; i <= 255; i++) + { + CON += i*i*gray_prob[i];//计算CON + ASM += gray_prob[i] * gray_prob[i];//计算角度方向二阶矩 + if (gray_prob[i]!=0) + ENT += (0-gray_prob[i] * log10(gray_prob[i]));//计算熵 + MEAN += v*i*gray_prob[i];//计算平均值 + } + return; +} + +void detect_definition(cv::Mat input_img, float& sb, float& lap, float& dev) +{ + Mat imgGray, imgSobel, imgLap, imgDev, meanValueImage; + cvtColor(input_img, imgGray, CV_BGR2GRAY); + Sobel(imgGray, imgSobel, CV_16U, 1, 1); + Laplacian(imgGray, imgLap, CV_16U); + meanStdDev(imgGray,meanValueImage,imgDev); + sb = mean(imgSobel)[0]; + lap = mean(imgLap)[0]; + dev = mean(imgDev)[0]; +} + + int main(int argc, char *argv[]) { Mat img = imread(argv[1]); - float cast, da, satu; - detect_brightness(img, cast, da); - detect_saturation(img, satu); - cout<