|
@@ -41,15 +41,6 @@ int fingerprintFromFFAVFrame(FILE *file, AVFrame *frame, char buf[64]) {
|
|
|
if (file) fprintf(file, "fingerprintFromFFAVFrame\n");
|
|
|
if (!frame)return NULL;
|
|
|
|
|
|
-// if (1) {
|
|
|
-// memset((void *)buf, 0,sizeof(char) * 8 * 8);
|
|
|
-// for (int i = 0; i <64 ; ++i) {
|
|
|
-// buf[i] = 1;
|
|
|
-// }
|
|
|
-// return 64;
|
|
|
-// }
|
|
|
-
|
|
|
-// auto img = avframeToCvmat(frame);
|
|
|
int width = frame->width;
|
|
|
int height = frame->height;
|
|
|
cv::Mat img(height, width, CV_8UC3);
|
|
@@ -67,14 +58,15 @@ int fingerprintFromFFAVFrame(FILE *file, AVFrame *frame, char buf[64]) {
|
|
|
// std::string str = frame->pts + "";
|
|
|
// imshow(str, img);
|
|
|
int scale_width = 8, scale_height = 8;
|
|
|
- Mat gray, res;
|
|
|
+ cv::Mat gray, res;
|
|
|
if (file) fprintf(file, "fingerprintFromFFAVFrame 3\n");
|
|
|
//缩放成8x8大小灰度图
|
|
|
resize(img, res, Size(scale_width, scale_height));
|
|
|
if (file) fprintf(file, "fingerprintFromFFAVFrame 4\n");
|
|
|
cvtColor(res, gray, COLOR_BGR2GRAY);
|
|
|
if (file) fprintf(file, "fingerprintFromFFAVFrame 5\n");
|
|
|
- Mat mat_mean, mat_stddev;
|
|
|
+ //获取灰度平均值
|
|
|
+ cv::Mat mat_mean, mat_stddev;
|
|
|
meanStdDev(gray, mat_mean, mat_stddev);//求灰度图像的均值、均方差
|
|
|
double mn = 0;
|
|
|
if (!mat_mean.empty()) {
|
|
@@ -83,10 +75,50 @@ int fingerprintFromFFAVFrame(FILE *file, AVFrame *frame, char buf[64]) {
|
|
|
printf("灰度平均值 empty!\n");
|
|
|
return -1;
|
|
|
};
|
|
|
- //获取灰度平均值
|
|
|
-// mn = mean(gray)[0];
|
|
|
if (file) fprintf(file, "fingerprintFromFFAVFrame 6\n");
|
|
|
+ if (gray.cols * gray.rows < scale_height * scale_width)return NULL;
|
|
|
+// //得到图像指纹值
|
|
|
+ for (int i = 0; i < 8; i++) {
|
|
|
+ for (int j = 0; j < 8; j++) {
|
|
|
+ buf[i * 8 + j] = (gray.at<unsigned char>(i, j) > mn) ? 1 : 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
if (file) fprintf(file, "fingerprintFromFFAVFrame 7\n");
|
|
|
+ return scale_width * scale_height;
|
|
|
+}
|
|
|
+int fingerprintFromFFAVFrameV2(FILE *file, AVFrame *frame, char buf[64]) {
|
|
|
+ if (file) fprintf(file, "fingerprintFromFFAVFrame\n");
|
|
|
+ if (!frame)return NULL;
|
|
|
+
|
|
|
+ int width = frame->width;
|
|
|
+ int height = frame->height;
|
|
|
+ cv::Mat img(height, width, CV_8UC3);
|
|
|
+ int cvLinesizes[1];
|
|
|
+ cvLinesizes[0] = img.step1();
|
|
|
+ SwsContext *conversion = sws_getContext(width, height, (AVPixelFormat) frame->format, width, height,
|
|
|
+ AVPixelFormat::AV_PIX_FMT_BGR24, SWS_FAST_BILINEAR, NULL, NULL, NULL);
|
|
|
+ sws_scale(conversion, frame->data, frame->linesize, 0, height, &img.data, cvLinesizes);
|
|
|
+ sws_freeContext(conversion);
|
|
|
+ if (img.empty()) {
|
|
|
+ printf("image is empty.");
|
|
|
+ return NULL;
|
|
|
+ }
|
|
|
+ int scale_width = 8, scale_height = 8;
|
|
|
+ cv::Mat gray, res;
|
|
|
+ cvtColor(img, gray, COLOR_BGR2GRAY);
|
|
|
+ //缩放成8x8大小灰度图
|
|
|
+ resize(gray, gray, Size(scale_width, scale_height));
|
|
|
+
|
|
|
+ //获取灰度平均值
|
|
|
+ cv::Mat mat_mean, mat_stddev;
|
|
|
+ meanStdDev(gray, mat_mean, mat_stddev);//求灰度图像的均值、均方差
|
|
|
+ double mn = 0;
|
|
|
+ if (!mat_mean.empty()) {
|
|
|
+ mn = mat_mean.at<double>(0, 0);
|
|
|
+ } else {
|
|
|
+ printf("灰度平均值 empty!\n");
|
|
|
+ return -1;
|
|
|
+ };
|
|
|
if (gray.cols * gray.rows < scale_height * scale_width)return NULL;
|
|
|
// //得到图像指纹值
|
|
|
for (int i = 0; i < 8; i++) {
|
|
@@ -94,11 +126,12 @@ int fingerprintFromFFAVFrame(FILE *file, AVFrame *frame, char buf[64]) {
|
|
|
buf[i * 8 + j] = (gray.at<unsigned char>(i, j) > mn) ? 1 : 0;
|
|
|
}
|
|
|
}
|
|
|
- if (file) fprintf(file, "fingerprintFromFFAVFrame 8\n");
|
|
|
- if (file) fprintf(file, "fingerprintFromFFAVFrame 9\n");
|
|
|
+ if (file) fprintf(file, "fingerprintFromFFAVFrame 7\n");
|
|
|
return scale_width * scale_height;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
float fingerprint_compare(const char *arr, const char *arr2, int len) {
|
|
|
int size = len;
|
|
|
int sim_sum = 0;
|