视觉项目day28.21号实验记录(手机固定高度15cm拍摄+直方图均衡化+模板匹配,模板12个,测试28个,效果十分差)

Posted 拾牙慧者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了视觉项目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 << js中对数组的操作-------Day49

屏幕适配

7月30号|来一场手把手助您打造智能视觉新爆款的技术动手实验

神经拟态视觉传感器来了!手机和车都能用,李开复雷军纷纷投资

工业视觉引导基础及项目评估流程

小米面试——计算机视觉算法实习生