视觉项目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);
模板图片按照大小排序
将模板图按照像素大小,从大到小排序。防止出现测试图局部地区误判成像素较少的模板(这是因为发现误判的情况还挺多的)
结果:没有卵用。。。
总代码
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