计算特征矩阵及哈希值(含OpenCV代码)
生活随笔
收集整理的這篇文章主要介紹了
计算特征矩阵及哈希值(含OpenCV代码)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
將簡化色彩后的特征圖像中每個像素依次與當前圖像像素平均值進行比較
程序代碼如下:
#include <opencv2/opencv.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <stdio.h>using namespace cv;int main() {Mat srcImage = imread("1.jpg");int mm=8, nn=8;//mm,nn為縮小后圖像的大小。int cc=64; //cc為圖像簡化色彩后的灰度級數。int t[8 * 8];namedWindow("原圖");imshow("原圖", srcImage);cvtColor(srcImage, srcImage, CV_BGR2GRAY); //圖像化為灰度namedWindow("灰度原圖");imshow("灰度原圖", srcImage);cv::Size dsize = Size(mm, nn);cv::resize(srcImage, srcImage,dsize);namedWindow("灰度縮小");imshow("灰度縮小", srcImage);Mat Feature(mm, nn, CV_32SC1, Scalar::all(0));int i, j;int M = srcImage.rows;int N = srcImage.cols;for (i = 0; i<M; i++)for (j = 0; j<N; j++){Feature.at<int>(i / (M / mm), j / (N / nn)) = Feature.at<int>(i / (M / mm), j / (N / nn)) + srcImage.at<uchar>(i, j);// Feature.at<uchar>(i/(M/8),j/(N/8))+=m.at<uchar>(i,j);}//測試:看看縮小后,圖像里面的每個像素值是多少:for(i=0;i<mm;i++)for (j = 0; j < nn; j++)printf_s("縮小后,圖像里面的每個像素值(%d,%d)%d \n", mm, nn, Feature.at<int>(i, j));printf_s("end\n");//簡化色彩。當前灰度級為8位,即256色,將其處理為cc色。//這里設置cc=64for (i = 0; i<mm; i++)for (j = 0; j<nn; j++)Feature.at<int>(i, j) /= (256 / cc);//測試:看看簡化色彩后,圖像內里面的每個像素值是多少:for(i=0;i<mm;i++)for (j = 0; j < nn; j++)printf_s("簡化色彩后,圖像內里面的每個像素值是多少(%d,%d):%d \n", mm, nn, Feature.at<int>(i, j));//第3步:計算圖像的平均值。double sum, aver;sum = 0;for (i = 0; i<mm; i++)for (j = 0; j<nn; j++)sum += Feature.at<int>(i, j);aver = sum / (mm*nn);printf_s("sum=%lf,aver=%lf",sum,aver);//第4步:計算像素值與平均值大小關系。同時得到特征矩陣FeatureResult,并返回。int flag = 0;int FeatureResult[8 * 8] = {0};for (i = 0; i<mm; i++)for (j = 0; j<nn; j++)if (Feature.at<int>(i, j)>aver)FeatureResult[flag++] = 1;elseFeatureResult[flag++] = 0;printf_s("\n特征矩陣:\n");for (i = 0; i < mm*nn; i++){printf_s("%d ", FeatureResult[i]);if (i % 7 == 0)printf_s("\n");}printf("\n");waitKey();return 0; }程序運行結構如下:
然后關于哈希值,如下所示:
總結
以上是生活随笔為你收集整理的计算特征矩阵及哈希值(含OpenCV代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库原理概述
- 下一篇: flexigrid参数API