OpenCV(3):用Vs+Qt制作一个查看图片相似度的窗口程序
OpenCV(2):用Vs+Qt制作一个显示两张图片的窗口程序
在制作了窗口程序后,在网上找了比较两张图片差异度的算法。
哈希值方法:https://blog.csdn.net/fengbingchun/article/details/42153261
(不过我觉得他在转化为64级灰度时多除了4)
基于此算法做了修改,形成一个以两个Mat为参数,返回值为整形的函数。
proces.h
#pragma once
#include <opencv2/opencv.hpp>
#include<QGraphicsScene>
#include<QGraphicsView> //graphicsview类
#include<opencv2\imgproc\imgproc.hpp>
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <string>
using namespace cv;class progress
{
private:int iDiffNum;public:int chuli(Mat matSrc1, Mat matStrc2);};
process.cpp
#include "progress.h"
using namespace cv;
using namespace std;int progress::chuli(Mat matSrc1,Mat matSrc2)
{Mat matDst1, matDst2;// 缩小尺寸:将图像缩小到8*8的尺寸,总共64个像素。这一步的作用是去除图像的细节,只保留结构/明暗等基本信息,摒弃不同尺寸/比例带来的图像差异;resize(matSrc1, matDst1, Size(8, 8));resize(matSrc2, matDst2, Size(8, 8));//灰度化cvtColor(matDst1, matDst1, CV_BGR2GRAY);cvtColor(matDst2, matDst2, CV_BGR2GRAY);int iAvg1 = 0, iAvg2 = 0;int arr1[64], arr2[64];for (int i = 0; i < 8; i++) {//位置是第i行的头指针uchar* data1 = matDst1.ptr<uchar>(i);uchar* data2 = matDst2.ptr<uchar>(i);int tmp = i * 8;for (int j = 0; j < 8; j++) {int tmp1 = tmp + j;arr1[tmp1] = data1[j] / 4 ;arr2[tmp1] = data2[j] / 4 ;iAvg1 += arr1[tmp1];iAvg2 += arr2[tmp1];}}iAvg1 /= 64;iAvg2 /= 64;for (int i = 0; i < 64; i++) {arr1[i] = (arr1[i] >= iAvg1) ? 1 : 0;arr2[i] = (arr2[i] >= iAvg2) ? 1 : 0;}int iDiffNum = 0;for (int i = 0; i < 64; i++)if (arr1[i] != arr2[i])++iDiffNum;return iDiffNum;
}
在相应的cpp下添加函数(我使用了槽函数)
void QtGuiApplication::on_Similar_button_clicked()
{progress *pro;QString panduan;int den=((pro->chuli(image_1, image_2)));if (den <= 5){panduan = "They are too similar!";}else if (den > 10){panduan = "They are two different pictures!";}else{panduan = "They are a litter similar.";}den = 100 - den;QString str = QString::number(den);QString buf = "相似度为: " + str +"% 我的判断为: " + panduan;ui.Similar_text->setText(buf);
}
效果如图:
总结:
1.因为算法比较简单加之专门用于比较两张图 的相似性,所以不能很好的识别 图中的内容(如具体的物体),所以我决定将它作为软件中的一个功能,而不是当做软件本体。
2.目前还停留在算法表面,关于具体核心算法需要进一步学习。
OpenCV(3):用Vs+Qt制作一个查看图片相似度的窗口程序相关推荐
- Qt制作一个相册浏览工具
如何用Qt制作一个相册浏览的小程序? 程序开发思路如下: 1.支持多张相片浏览,可翻页浏览,相片可从本地导入; 2.相片要有放大和缩小的功能; 3.相片可自动浏览,时间间隔可自定义. 主要的代码如下: ...
- 【Python】【PyQt5实战】【从零开始】 制作一个“一键生成”计算题的GUI程序【自适应全屏】
[Python][PyQt5实战][从零开始] 制作一个"一键生成"计算题的GUI程序[自适应全屏] 施法前摇 第三方库准备 IDE配置 UI设计 交互设计 打包成exe文件 更多 ...
- 使用FileReader制作一个简短图片上传
使用FileReader制作一个简短图片上传 效果示例图 代码示例图 效果示例图 代码示例图 <!DOCTYPE html> <html><head><met ...
- opencv学习笔记(六)直方图比较图片相似度
opencv学习笔记(六)直方图比较图片相似度 opencv提供了API来比较图片的相似程度,使我们很简单的就能对2个图片进行比较,这就是直方图的比较,直方图英文是histogram, 原理就是就是将 ...
- QT制作一个图片播放器
前言:使用qt制作了一个简单的图片播放器,可以播放gif.png等格式图片 先来看看播放器的功能(当然是很简陋的,没有很深入的设计): 1.点击图片列表中图片进行播放. 2.自动播放,播放的图片的间隔 ...
- qt制作一个画板_基于Qt的画图板的设计与实现(含录像)
基于Qt的画图板的设计与实现(含录像)(任务书,开题报告,外文翻译,毕业论文20000字,程序代码,答辩PPT,答辩视频录像) 摘要 本文的主要内容是记述画图板的设计与实现课程设计中的一些关键技术和辅 ...
- java小程序查看器_JAVA的一个查看图片的小程序
只是一个查看本地图片展示的小Demo.发微博字数超长,好像只能发文章. 直接上代码,本代码已经在JDK1.8上测试完毕. import java.io.File; import java.beans. ...
- 如何自己制作一个GIF图片
GIF图片的制作其实是非常有用的.我们在用一些聊天软件聊天的时候总会一些GIF格式的图片,也就是所谓的动态表情图来表达自己的意思,这样更加直观,也更加形象一些.并且在斗图的时候,就是比谁的GIF表情图 ...
- 怎么制作一个属于自己家政公司的小程序
小程序在线下各个场景中的不断应用,使得其功能和入口在不断的升级,为用户和商家提供的便捷性也越来越大.家政服务行业在小程序开发的浪潮中,为用户提供更加便捷的服务,更加满意的服务,就需要依靠小程序这样一款 ...
最新文章
- 树形dp——树的重心(2) 代码调试理解
- kafka0.9 java commit_kafka提交offset失败
- SQL语句统计每天、每月、每年的 数据
- leetcode-49-字母异位词分组
- 详解 Too many open files
- SQL基础E-R图画法(二)
- Python函数的概念和使用
- PDF 报告生成器:用 reportlab 和 pdfrw 生成自定义 PDF 报告
- android 计步功能原理,Android开发——计步功能
- 荧光仪电源维修Spellman电源维修FF60P4X3313
- Redis数据结构之list对象
- 毕业设计指导教师评语 计算机,毕业设计指导教师评语
- Java程序-自制班级随机选人程序
- dismiss和remove_eliminate, remove, dismiss的区别:新东方考研英语词汇辨析
- POJ 1625 Censored!(AC自动机-指针版+DP+大数)题解
- 太恐怖了 两天搞定一个项目 Java Web MVC 网络商城教程+源代码
- 410款INTEL CPU详细技术资料速查表
- SysinternalsSuite
- onedrive电脑手机不同步_onedrive无法同步
- 2to3:python2自动转python3