使用图像直方图方式搜索相似图片
该文章仅用于学习~
通常我们搜索图片,都是根据图片的标签搜索的。基于内容的搜索,就是不知道标签,而是直接输入一幅图像,然后搜索到与这幅图像相同或相似的图像(以图搜图)。以图搜图的方法之一就是比较图像直方图。
下面我将使用图像直方图形式匹配相似图片:
在不同电脑上匹配时要修改3个地方
eg:想读到的原图务必在该程序文件夹下存有图片!否则会报错
(1)path的路径
(2)line 87 的绝对路径
(3)file[]等图像字符串的大小,这里我D盘只有3个图像判断,故直接写了 <3> 在line 80及line28
(4)line 119 的匹配值可以修改,我设置了-0.98到0.02的区间图像都为符合的图像,可以根据自己的图像所需进行修改
#include<opencv2/opencv.hpp>
#include<iostream>
#include<vector>
#include<fstream>
#include <io.h>
#include<string>
using namespace cv;
using namespace std;
const char path[100] = "D:\\image\\*.jpg"; //不同的路径可以自己改,支持通配符查找,注意同时修改 line85 的图像路径
/* 在不同电脑上匹配时要修改3个地方
eg:想读到的原图务必在该程序文件夹下存有图片!否则会报错
(1)path的路径
(2)line 87 的绝对路径
(3)file[]等图像字符串的大小,这里我D盘只有3个图像判断,故直接写了 <3> 在line 80及line28
(4)line 119 的匹配值可以修改,我设置了-0.98到0.02的区间图像都为符合的图像,可以根据自己的图像所需进行修改
*/
int main()
{
/*********************将文件夹中的文件保存为file[]字符串**********************/
string file[3];//*
struct _finddata_t fileinfo;
intptr_t handle;
handle = _findfirst(path, &fileinfo);
int i = 1;//第1位
if (!handle)
{
cout << "输入的路径有错误" << endl;
return -1;
}
else
{
file[0] = fileinfo.name;//试着读出第一个图象存到第0位,如果可以读出就继续,不然就退出
//cout << fileinfo.name << endl;
while (_findnext(handle,