【视觉项目day28.21号实验记录(手机固定高度15cm拍摄+直方图均衡化+模板匹配,模板12个,测试28个,效果十分差)】古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。这篇文章主要讲述视觉项目day28.21号实验记录(手机固定高度15cm拍摄+直方图均衡化+模板匹配,模板12个,测试28个,效果十分差)相关的知识,希望能为你提供帮助。
目录
- ??均衡化代码??
- ??模板图片按照大小排序??
- ??总代码??
- ??测试效果??
- ??新思路??
所以在比对之前,我们需要对测试图和模板图进行直方图均衡化,这一步可以先实现。
今天将采用批量处理的方式,来检测模板匹配的准确度。
均衡化代码
这里发现,最好还是先对所有测试图均衡化再截取模板。
因为测试图和模板图分开来均衡化是不合理的。
equalizeHist( src, dst );
该函数只支持单通道的均衡化,对于彩色图像来说可以先将多通道分离成单通道,再合并成多通道。
for (int i = 0; i < filenames.size(); i++)
srcImg = cv::imread(filenames[i]);
//*************************对图片的处理部分***************************/
//这里我们对原图进行直方图均衡化
vector< Mat> channels; //定义存储的容器
split(srcImg,channels);
Mat bluechannel = channels[0]; //b通道的图像
equalizeHist(bluechannel, bluechannel); //均衡化
Mat greenchannel = channels[1]; //g通道的图像
equalizeHist(greenchannel, greenchannel);
Mat redchannel = channels[2]; //r通道的图像
equalizeHist(redchannel, redchannel);
merge(channels, dstImg); //合并通道
//********************************************************************/
savedfilename = dest + filenames[i].substr(len);
std::cout < < savedfilename < < std::endl;
cv::imwrite(savedfilename, dstImg);
cout < < "第" < < i < < "张完成" < < endl;
waitKey(30);
模板图片按照大小排序
总代码
将模板图按照像素大小,从大到小排序。防止出现测试图局部地区误判成像素较少的模板(这是因为发现误判的情况还挺多的)
结果:没有卵用。。。
#include < opencv2/opencv.hpp>
#include "opencv2/features2d.hpp"
#include < vector>
#include < algorithm>
#include < iostream>
#include "windows.h"
#include < stdio.h>
#include < time.h>
#include < math.h>
#include < fstream>
#define WINDOW_NAME "【程序窗口】"
using namespace cv;
using namespace std;
//展示推测结果与实际值
void show_text(int nums, String real_name)
if (nums == 0)
cout < < "推测:大棕瓶 "< < ""< < real_name < < endl;
else if (nums == 1)
cout < < "推测:BAL" < < "" < < real_name < < endl;
else if (nums == 2)
cout < < "推测:方底圆肩 " < < "" < < real_name < < endl;
else if (nums == 3)
cout < < "推测:长条 " < < "" < < real_name < < endl;
else if (nums == 4)
cout < < "推测:圆肩" < < "" < < real_name < < endl;
else if(nums == 5)
cout < < "推测:桶肩" < < "" < < real_name < < endl;
else if (nums == 6)
cout < < "推测:多面肩" < < "" < < real_name < < endl;
else if (nums == 7)
cout < < "推测:方方" < < "" < < real_name < < endl;
else if (nums == 8)
cout < < "推测:小长条" < < "" < < real_name < < endl;
else if (nums == 9)
cout < < "推测:小桶肩" < < "" < < real_name < < endl;
else if (nums == 10)
cout < < "推测:小方肩" < < "" < < real_name < < endl;
else if (nums ==11)
cout < < "推测:葡萄形" < < "" < < real_name < < endl;
else if (nums == 12)
cout < < "推测:小小长条" < < "" < < real_name < < endl;
else
cout < < "推测:无" < < "" < < real_name < < endl;
//展示每个模板与测试图最佳匹配的可能性
void show_probability(int nums, double probability)
if (nums == 0)
cout < < "大棕瓶的概率 " < < "" < < probability < < endl;
else if (nums == 1)
cout < < "BAL的概率" < < "" < < probability < <推荐阅读
- 神经网络计算——神经网络实现鸢尾花分类
- Java基础之细说枚举
- React 简书项目实战icon优化header
- css裁剪图片 clip-path
- 研究生数学建模竞赛-无人机在抢险救灾中的优化应用
- Java基础 (算术,赋值,逻辑,位,三元 运算符)
- 抖音__ac_signature
- 图像分割——基于二维灰度直方图的阈值处理
- 力扣——求一组字符中的第一个回文字符