需求:
如果前端页面中出现 A 图,要求替换成 B 图
A B
难点:
不同的人上传的图片,上传的文件名称都不一样,所在的目录都不一样。
必须基于图片内容的搜索。
另外,大量图片内容相同的文件,可以用一个文件来,比如A.png 和b.bmp的内容一样,可以用c.jpg来代替。
AI关键词:
欧式距离;(2)、曼哈顿距离;(3)、切比雪夫距离;(4)、闵可夫斯基距离;(5)、标准化欧式距离;(6)、马氏距离;(7)、巴氏距离;(8)、汉明距离;
环境部署:
ubuntu16.04 , Opencv4.1 , opencv_contrib
….
make -j7
make install
…
坑:新建文件opencv.pc : 增加下列内容,必须出现下面的结果:
运行:root@ubuntu:/home/opencv4.1/current/opencv# pkg-config --libs --cflags opencv
-I/usr/local/include/opencv4 -I/usr/local/include/opencv4/opencv2 -L/usr/local/lib -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_calib3d -lopencv_ccalib -lopencv_core -lopencv_datasets -lopencv_dnn_objdetect -lopencv_dnn -lopencv_dpm -lopencv_face -lopencv_features2d -lopencv_flann -lopencv_freetype -lopencv_fuzzy -lopencv_gapi -lopencv_hfs -lopencv_highgui -lopencv_imgcodecs -lopencv_img_hash -lopencv_imgproc -lopencv_line_descriptor -lopencv_ml -lopencv_objdetect -lopencv_optflow -lopencv_phase_unwrapping -lopencv_photo -lopencv_plot -lopencv_quality -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_shape -lopencv_stereo -lopencv_stitching -lopencv_structured_light -lopencv_superres -lopencv_surface_matching -lopencv_text -lopencv_tracking -lopencv_videoio -lopencv_video -lopencv_videostab -lopencv_xfeatures2d -lopencv_ximgproc -lopencv_xobjdetect -lopencv_xphoto
总共代码不超过180行
Mat
imageqp=imread("qingpuXe.jpeg");
cvtColor(imageqp, grayTemp_qp,
CV_BGR2GRAY);
g_destHashCode_qp = get_mat_pHashValue(grayTemp_qp);
//缩放尺寸, 离散余弦变换,取左上角8*8区块的DCT系数(图像的纹理),均值函数,计算哈希值。
nDistance = CountNonZero(g_destHashCode_cm
!= destHashCode); 计算汉明距离。
nDistance = 0 : 说明完全相同,=3,是相似; >4,完全不同的两张图片。
Build.sh
g++ `pkg-config
--cflags opencv` -o check main.cpp `pkg-config --libs opencv` -std=c++11
run: