【视觉项目】【day2】8.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 << endl;}else if (nums == 2){cout << "方底圆肩的概率 " << "   " << probability << endl;}else if (nums == 3){cout << "长条的概率 " << "   " << probability << endl;}else if (nums == 4){cout << "圆肩的概率" << "   " << probability << endl;}else if (nums == 5){cout << "桶肩的概率" << "   " << probability << endl;}else if (nums == 6){cout << "多面肩的概率" << "   " << probability << endl;}else if (nums == 7){cout << "方方的概率" << "   " << probability << endl;}else if (nums == 8){cout << "小长条的概率" << "   " << probability << endl;}else if (nums == 9){cout << "小桶肩的概率" << "   " << probability << endl;}else if (nums == 10){cout << "小方肩的概率" << "   " << probability << endl;}else if (nums == 11){cout << "葡萄形的概率" << "   " << probability << endl;}else if (nums == 12){cout << "小小长条的概率" << "   " << probability << endl;}else{cout << "无的概率" << "   " << probability << endl;}
}
//主程序
int main()
{//改变控制台字体颜色system("color 02");//******************************************【0】获取测试文件夹路径和模板文件夹路径********************************************************////获取测试文件夹路径和模板文件夹路径cv::String path_test = "D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/均衡化后的测试图/";        cv::String path_template = "D:/opencv_picture_test/视觉项目resize后的图片夹/模板图片夹/均衡化后的template/";    cout << "获取地址成功" << endl;//******************************************【1】加载模板图像********************************************************////创建模板vectorvector<Mat>tempMat;//插入模板元素Mat srcImage;std::vector<cv::String> temp_filenames;cv::glob(path_template, temp_filenames);                 //opencv里面用来读取指定路径下文件名的一个很好用的函数for (int i = 0; i < temp_filenames.size(); i++){srcImage = cv::imread(temp_filenames[i]);tempMat.push_back(srcImage);}//获取模板数目int tempMat_Nums = tempMat.size();//******************************************【2】加载测试图像********************************************************////创建测试vectorvector<Mat>testMat;//插入测试元素std::vector<cv::String> test_filenames;cv::glob(path_test, test_filenames);                 //opencv里面用来读取指定路径下文件名的一个很好用的函数for (int i = 0; i < test_filenames.size(); i++){srcImage = cv::imread(test_filenames[i]);testMat.push_back(srcImage);}//获取测试图数目int testMat_Nums = testMat.size();//******************************************【3】对每张测试图进行模板匹配********************************************************//for (int j = 0;j < testMat_Nums;j++){cout <<"第"<< j <<"张测试图片的测试"<< endl;Mat resultMat;Mat dispMat;int match_method = TM_CCORR_NORMED;		//经过试错发现此参数较好。//用每个模板去匹配测试图,并且找出每次结果的最佳匹配值,将值存入vector中vector<double>goodval;vector<Point>goodlock;int matchnum = 0;Point matchLoc;for (int i = 0;i < tempMat_Nums;i++){//采用模板与目标图像像素与各自图像的平均值计算dot product,正值越大匹配度越高,负值越大图像的区别越大,但如果图像没有明显的特征(即图像中的像素值与平均值接近)则返回值越接近0;matchTemplate(testMat[j], tempMat[i], resultMat, match_method);//不归一化,因为不同模板归一化后的最佳值皆为1,无法比较//normalize(resultMat, resultMat, 0, 1, NORM_MINMAX, -1, Mat());	//归一化double minVal; double maxVal; Point minLoc; Point maxLoc;	//定义最大值最小值以及它们的位置变量minMaxLoc(resultMat, &minVal, &maxVal, &minLoc, &maxLoc, Mat());	//从结果矩阵中找到匹配度最大以及最小的值并且确定其位置//对于方法SQDIFF和SQDIFF_NORMED两种方法来讲,越小的值就有着更高的匹配结果//而其余的方法则是数值越大匹配效果越好if (match_method == TM_SQDIFF || match_method == TM_SQDIFF_NORMED){goodlock.push_back(minLoc);goodval.push_back(minVal);}else{goodlock.push_back(maxLoc);goodval.push_back(maxVal);}show_probability(i, maxVal);//cout << i << "  " << maxVal << endl;}//找到goodval中最佳的一组if (match_method == TM_SQDIFF || match_method == TM_SQDIFF_NORMED){auto goodPosition = min_element(goodval.begin(), goodval.end());matchnum = distance(begin(goodval), goodPosition);}else{auto goodPosition = max_element(goodval.begin(), goodval.end());matchnum = distance(begin(goodval), goodPosition);}show_text(matchnum, test_filenames[j]);matchLoc = goodlock[matchnum];testMat[j].copyTo(dispMat);//以最佳匹配点为中心绘制与模板相同大小的框rectangle(dispMat, matchLoc, Point(matchLoc.x + tempMat[matchnum].cols, matchLoc.y + tempMat[matchnum].rows), Scalar::all(0), 2, 8, 0);namedWindow("testMat", WINDOW_NORMAL);//WINDOW_NORMAL允许用户自由伸缩imshow("testMat", dispMat);waitKey(30);}return 0;
}

测试效果

获取地址成功
第0张测试图片的测试
大棕瓶的概率 0.999962
BAL的概率 0.943395
方底圆肩的概率 0.65766
长条的概率 0.963785
圆肩的概率 0.962278
桶肩的概率 0.975272
多面肩的概率 0.960634
方方的概率 0.960171
小长条的概率 0.972566
小桶肩的概率 0.974289
小方肩的概率 0.974025
葡萄形的概率 0.981708
小小长条的概率 0.960757
推测:大棕瓶 D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/均衡化后的测试图\BAL.jpg
第1张测试图片的测试
大棕瓶的概率 0.973387
BAL的概率 0.952295
方底圆肩的概率 0.617728
长条的概率 0.971874
圆肩的概率 0.978067
桶肩的概率 0.977255
多面肩的概率 0.961869
方方的概率 0.968212
小长条的概率 0.977279
小桶肩的概率 0.98047
小方肩的概率 0.972961
葡萄形的概率 0.983062
小小长条的概率 0.961548
推测:葡萄形 D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/均衡化后的测试图\BAL2.jpg
第2张测试图片的测试
大棕瓶的概率 0.94555
BAL的概率 0.999969
方底圆肩的概率 0.642374
长条的概率 0.95283
圆肩的概率 0.957193
桶肩的概率 0.959961
多面肩的概率 0.961516
方方的概率 0.947994
小长条的概率 0.968302
小桶肩的概率 0.96168
小方肩的概率 0.959112
葡萄形的概率 0.975743
小小长条的概率 0.946948
推测:BAL D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/均衡化后的测试图\长条.jpg
第3张测试图片的测试
大棕瓶的概率 0.949414
BAL的概率 0.969877
方底圆肩的概率 0.673656
长条的概率 0.954585
圆肩的概率 0.960936
桶肩的概率 0.959291
多面肩的概率 0.957988
方方的概率 0.951915
小长条的概率 0.973501
小桶肩的概率 0.960723
小方肩的概率 0.956964
葡萄形的概率 0.978376
小小长条的概率 0.948134
推测:葡萄形 D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/均衡化后的测试图\长条2.jpg
第4张测试图片的测试
大棕瓶的概率 0.958116
BAL的概率 0.954966
方底圆肩的概率 0.999696
长条的概率 0.96763
圆肩的概率 0.972593
桶肩的概率 0.966389
多面肩的概率 0.956725
方方的概率 0.965674
小长条的概率 0.970264
小桶肩的概率 0.972091
小方肩的概率 0.969356
葡萄形的概率 0.975405
小小长条的概率 0.961994
推测:方底圆肩 D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/均衡化后的测试图\大棕瓶.jpg
第5张测试图片的测试
大棕瓶的概率 0.960543
BAL的概率 0.943379
方底圆肩的概率 0.63105
长条的概率 0.999968
圆肩的概率 0.976092
桶肩的概率 0.978699
多面肩的概率 0.962947
方方的概率 0.97815
小长条的概率 0.970794
小桶肩的概率 0.982023
小方肩的概率 0.976902
葡萄形的概率 0.981179
小小长条的概率 0.972171
推测:长条 D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/均衡化后的测试图\多面肩+厚底.jpg
第6张测试图片的测试
大棕瓶的概率 0.961845
BAL的概率 0.938932
方底圆肩的概率 0.631991
长条的概率 0.98343
圆肩的概率 0.977328
桶肩的概率 0.976888
多面肩的概率 0.964427
方方的概率 0.980922
小长条的概率 0.973677
小桶肩的概率 0.981396
小方肩的概率 0.975346
葡萄形的概率 0.981092
小小长条的概率 0.974295
推测:长条 D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/均衡化后的测试图\多面肩+厚底2.jpg
第7张测试图片的测试
大棕瓶的概率 0.969404
BAL的概率 0.961238
方底圆肩的概率 0.656272
长条的概率 0.984213
圆肩的概率 0.99995
桶肩的概率 0.979073
多面肩的概率 0.965727
方方的概率 0.981193
小长条的概率 0.980419
小桶肩的概率 0.985429
小方肩的概率 0.979214
葡萄形的概率 0.983438
小小长条的概率 0.971944
推测:圆肩 D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/均衡化后的测试图\方底圆肩+料纹.jpg
第8张测试图片的测试
大棕瓶的概率 0.952006
BAL的概率 0.939826
方底圆肩的概率 0.649975
长条的概率 0.958495
圆肩的概率 0.951616
桶肩的概率 0.999959
多面肩的概率 0.958412
方方的概率 0.955174
小长条的概率 0.967092
小桶肩的概率 0.967042
小方肩的概率 0.967212
葡萄形的概率 0.981166
小小长条的概率 0.958081
推测:桶肩 D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/均衡化后的测试图\方方.jpg
第9张测试图片的测试
大棕瓶的概率 0.956575
BAL的概率 0.959194
方底圆肩的概率 0.692909
长条的概率 0.970126
圆肩的概率 0.969639
桶肩的概率 0.969893
多面肩的概率 0.960757
方方的概率 0.966829
小长条的概率 0.969455
小桶肩的概率 0.977891
小方肩的概率 0.970097
葡萄形的概率 0.979115
小小长条的概率 0.960115
推测:葡萄形 D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/均衡化后的测试图\方肩+脖夹料.jpg
第10张测试图片的测试
大棕瓶的概率 0.95998
BAL的概率 0.942382
方底圆肩的概率 0.690289
长条的概率 0.975686
圆肩的概率 0.967611
桶肩的概率 0.974151
多面肩的概率 0.959056
方方的概率 0.975163
小长条的概率 0.96586
小桶肩的概率 0.979523
小方肩的概率 0.975867
葡萄形的概率 0.979395
小小长条的概率 0.970433
推测:小桶肩 D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/均衡化后的测试图\方肩+肩薄.jpg
第11张测试图片的测试
大棕瓶的概率 0.960138
BAL的概率 0.943141
方底圆肩的概率 0.669811
长条的概率 0.974814
圆肩的概率 0.971561
桶肩的概率 0.973398
多面肩的概率 0.958736
方方的概率 0.973076
小长条的概率 0.968558
小桶肩的概率 0.97769
小方肩的概率 0.974977
葡萄形的概率 0.977497
小小长条的概率 0.972664
推测:小桶肩 D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/均衡化后的测试图\方肩+气泡.jpg
第12张测试图片的测试
大棕瓶的概率 0.967062
BAL的概率 0.956114
方底圆肩的概率 0.661852
长条的概率 0.981427
圆肩的概率 0.982139
桶肩的概率 0.977037
多面肩的概率 0.962865
方方的概率 0.977431
小长条的概率 0.975442
小桶肩的概率 0.982172
小方肩的概率 0.979168
葡萄形的概率 0.982967
小小长条的概率 0.973642
推测:葡萄形 D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/均衡化后的测试图\方肩+炸口.jpg
第13张测试图片的测试
大棕瓶的概率 0.96134
BAL的概率 0.941148
方底圆肩的概率 0.68
长条的概率 0.976162
圆肩的概率 0.969729
桶肩的概率 0.974416
多面肩的概率 0.959259
方方的概率 0.975174
小长条的概率 0.971821
小桶肩的概率 0.981986
小方肩的概率 0.976689
葡萄形的概率 0.97979
小小长条的概率 0.972547
推测:小桶肩 D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/均衡化后的测试图\方肩+皱纹气泡.jpg
第14张测试图片的测试
大棕瓶的概率 0.917715
BAL的概率 0.917199
方底圆肩的概率 0.640063
长条的概率 0.93437
圆肩的概率 0.932135
桶肩的概率 0.937066
多面肩的概率 0.999966
方方的概率 0.926692
小长条的概率 0.937533
小桶肩的概率 0.948577
小方肩的概率 0.944384
葡萄形的概率 0.965162
小小长条的概率 0.926824
推测:多面肩 D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/均衡化后的测试图\葡萄形+炸口.jpg
第15张测试图片的测试
大棕瓶的概率 0.962036
BAL的概率 0.951763
方底圆肩的概率 0.675355
长条的概率 0.981105
圆肩的概率 0.973268
桶肩的概率 0.97733
多面肩的概率 0.962335
方方的概率 0.999961
小长条的概率 0.972872
小桶肩的概率 0.982297
小方肩的概率 0.977359
葡萄形的概率 0.982195
小小长条的概率 0.974128
推测:方方 D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/均衡化后的测试图\桶肩+厚底.jpg
第16张测试图片的测试
大棕瓶的概率 0.96481
BAL的概率 0.947198
方底圆肩的概率 0.619446
长条的概率 0.98145
圆肩的概率 0.975495
桶肩的概率 0.976903
多面肩的概率 0.962956
方方的概率 0.979712
小长条的概率 0.97258
小桶肩的概率 0.983755
小方肩的概率 0.979232
葡萄形的概率 0.982808
小小长条的概率 0.971943
推测:小桶肩 D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/均衡化后的测试图\桶肩+厚底2.jpg
第17张测试图片的测试
大棕瓶的概率 0.946633
BAL的概率 0.956102
方底圆肩的概率 0.67591
长条的概率 0.968554
圆肩的概率 0.963828
桶肩的概率 0.970033
多面肩的概率 0.957061
方方的概率 0.965562
小长条的概率 0.966357
小桶肩的概率 0.976913
小方肩的概率 0.973826
葡萄形的概率 0.977784
小小长条的概率 0.962248
推测:葡萄形 D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/均衡化后的测试图\桶肩+炸肩.jpg
第18张测试图片的测试
大棕瓶的概率 0.957856
BAL的概率 0.954098
方底圆肩的概率 0.633056
长条的概率 0.966456
圆肩的概率 0.974416
桶肩的概率 0.971957
多面肩的概率 0.962382
方方的概率 0.961484
小长条的概率 0.999968
小桶肩的概率 0.970656
小方肩的概率 0.96648
葡萄形的概率 0.98605
小小长条的概率 0.953888
推测:小长条 D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/均衡化后的测试图\小长条.jpg
第19张测试图片的测试
大棕瓶的概率 0.941413
BAL的概率 0.933865
方底圆肩的概率 0.66242
长条的概率 0.952895
圆肩的概率 0.953722
桶肩的概率 0.950594
多面肩的概率 0.94644
方方的概率 0.950529
小长条的概率 0.950805
小桶肩的概率 0.959539
小方肩的概率 0.955079
葡萄形的概率 0.959137
小小长条的概率 0.942895
推测:小桶肩 D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/均衡化后的测试图\小方肩+波纹.jpg
第20张测试图片的测试
大棕瓶的概率 0.947933
BAL的概率 0.958943
方底圆肩的概率 0.694464
长条的概率 0.961204
圆肩的概率 0.968265
桶肩的概率 0.96511
多面肩的概率 0.954596
方方的概率 0.958223
小长条的概率 0.968379
小桶肩的概率 0.973762
小方肩的概率 0.965491
葡萄形的概率 0.975843
小小长条的概率 0.945753
推测:葡萄形 D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/均衡化后的测试图\小方肩+麻点.jpg
第21张测试图片的测试
大棕瓶的概率 0.942297
BAL的概率 0.919454
方底圆肩的概率 0.64704
长条的概率 0.960287
圆肩的概率 0.947416
桶肩的概率 0.963062
多面肩的概率 0.960944
方方的概率 0.951865
小长条的概率 0.950327
小桶肩的概率 0.982785
小方肩的概率 0.974504
葡萄形的概率 0.977247
小小长条的概率 0.953313
推测:小桶肩 D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/均衡化后的测试图\小方肩+气泡+瓶口破裂.jpg
第22张测试图片的测试
大棕瓶的概率 0.951699
BAL的概率 0.933098
方底圆肩的概率 0.643337
长条的概率 0.967801
圆肩的概率 0.963715
桶肩的概率 0.962655
多面肩的概率 0.945825
方方的概率 0.96187
小长条的概率 0.959702
小桶肩的概率 0.973458
小方肩的概率 0.967692
葡萄形的概率 0.9665
小小长条的概率 0.95645
推测:小桶肩 D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/均衡化后的测试图\小方肩.jpg
第23张测试图片的测试
大棕瓶的概率 0.953089
BAL的概率 0.949544
方底圆肩的概率 0.68363
长条的概率 0.968875
圆肩的概率 0.969542
桶肩的概率 0.968538
多面肩的概率 0.962623
方方的概率 0.964773
小长条的概率 0.966892
小桶肩的概率 0.999974
小方肩的概率 0.976818
葡萄形的概率 0.982622
小小长条的概率 0.959715
推测:小桶肩 D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/均衡化后的测试图\小方肩2.jpg
第24张测试图片的测试
大棕瓶的概率 0.947293
BAL的概率 0.927502
方底圆肩的概率 0.66462
长条的概率 0.962269
圆肩的概率 0.94927
桶肩的概率 0.964459
多面肩的概率 0.964288
方方的概率 0.952055
小长条的概率 0.951706
小桶肩的概率 0.980446
小方肩的概率 0.999955
葡萄形的概率 0.982902
小小长条的概率 0.959555
推测:小方肩 D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/均衡化后的测试图\小桶肩.jpg
第25张测试图片的测试
大棕瓶的概率 0.940802
BAL的概率 0.936727
方底圆肩的概率 0.634877
长条的概率 0.954007
圆肩的概率 0.947447
桶肩的概率 0.959983
多面肩的概率 0.961293
方方的概率 0.943803
小长条的概率 0.958485
小桶肩的概率 0.965919
小方肩的概率 0.963006
葡萄形的概率 0.999962
小小长条的概率 0.946233
推测:葡萄形 D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/均衡化后的测试图\小小长条.jpg
第26张测试图片的测试
大棕瓶的概率 0.956958
BAL的概率 0.943956
方底圆肩的概率 0.669834
长条的概率 0.972216
圆肩的概率 0.962061
桶肩的概率 0.97626
多面肩的概率 0.965706
方方的概率 0.966615
小长条的概率 0.967341
小桶肩的概率 0.978036
小方肩的概率 0.977363
葡萄形的概率 0.983658
小小长条的概率 0.99997
推测:小小长条 D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/均衡化后的测试图\圆肩.jpg
第27张测试图片的测试
大棕瓶的概率 0.964145
BAL的概率 0.948216
方底圆肩的概率 0.63238
长条的概率 0.977482
圆肩的概率 0.975546
桶肩的概率 0.976313
多面肩的概率 0.965695
方方的概率 0.974125
小长条的概率 0.972994
小桶肩的概率 0.981001
小方肩的概率 0.980286
葡萄形的概率 0.983809
小小长条的概率 0.981659
推测:葡萄形 D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/均衡化后的测试图\圆肩2.jpg
第28张测试图片的测试
大棕瓶的概率 0.962539
BAL的概率 0.949511
方底圆肩的概率 0.642578
长条的概率 0.977668
圆肩的概率 0.970616
桶肩的概率 0.97624
多面肩的概率 0.966701
方方的概率 0.975969
小长条的概率 0.971972
小桶肩的概率 0.980677
小方肩的概率 0.978517
葡萄形的概率 0.983187
小小长条的概率 0.979566
推测:葡萄形 D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/均衡化后的测试图\圆肩3.jpg

新思路

老师说可以考虑一下工业摄像头或者使用基于边缘的ncc模板匹配。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378393.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言 函数的参数传递示例_isgreater()函数以及C ++中的示例

c语言 函数的参数传递示例C isgreater()函数 (C isgreater() function) isgreater() function is a library function of cmath header, it is used to check whether the given first value is greater than the second value. It accepts two values (float, double or long…

在一个风景秀丽的小镇,一天早上,有N名晨跑爱好者(编号1~N)沿着优雅的江边景观道朝同一方向进行晨跑

【问题描述】 在一个风景秀丽的小镇&#xff0c;一天早上&#xff0c;有N名晨跑爱好者(编号1~N)沿着优雅的江边景观道朝同一方向进行晨跑&#xff0c;第i名跑者从位置si处起跑&#xff0c;且其速度为Vi。换句话说&#xff0c;对所有的实数t≥0&#xff0c;在时刻t时第i名跑者的…

linux内核测试,Linux内核测试的生命周期

内核持续集成(CKI)项目旨在防止错误进入 Linux 内核。在 Linux 内核的持续集成测试 一文中&#xff0c;我介绍了 内核持续集成Continuous Kernel Integration(CKI)项目及其使命&#xff1a;改变内核开发人员和维护人员的工作方式。本文深入探讨了该项目的某些技术方面&#xff…

Linux下动态库使用小结

1. 静态库和动态库的基本概念 静态库&#xff0c;是在可执行程序连接时就已经加入到执行码中&#xff0c;在物理上成为执行程序的一部分&#xff1b;使用静态库编译的程序运行时无需该库文件支持&#xff0c;哪里都可以用&#xff0c;但是生成的可执行文件较大。动态库&#xf…

【视觉项目】【day3】8.22号实验记录(利用canny检测之后的来进行模板匹配)

【day3】8.22号实验记录&#xff08;几乎没干正事的一天&#xff0c;利用canny检测之后的来进行模板匹配&#xff09; 今天没搞代码&#xff0c;主要是问研究生学长工业摄像头的接法的&#xff0c;学长也不知道&#xff0c;明天问问老师。。。 晚上搞了一下canny之后的模板匹配…

scala字符替换_如何替换Scala中的“坏”字符?

scala字符替换In Scala, programming language, all sorts of special characters are valid. The character set library is quite good and supports almost all characters in Scala programming. 在编程语言Scala中&#xff0c;各种特殊字符均有效。 字符集库非常好&#x…

linux dd 大文件下载,Linux dd+grep 大文件二分查找

Linux dd 命令用于读取、转换并输出数据。dd 可从标准输入或文件中读取数据&#xff0c;根据指定的格式来转换数据&#xff0c;再输出到文件、设备或标准输出。参数说明(dd --help)Usage: dd [OPERAND]...or: dd OPTIONCopy a file, converting and formatting according to th…

【视觉项目】【day1】8.20号实验记录(初步使用模板匹配)

目录【day1】8.20号实验记录&#xff08;初步使用模板匹配&#xff09;模板匹配单张图的代码利用多个模板去匹配多张图的代码写代码过程中遇到的问题【day1】8.20号实验记录&#xff08;初步使用模板匹配&#xff09; 模板匹配 利用模板匹配可以框定出瓶子&#xff0c;但是却…

第四章 纤维结构对染色性能的影响单元测验

1,利用红外光谱技术可以测定纤维的() 化学结构。 2,纤维完整的结构包括() 化学结构。 表面形态结构。 内部超分子结构。 3,纤维化学结构由于影响了纤维(),进而影响其染色性能 吸湿溶胀性能。 在染液中电离性能。 在染浴中的带电性。 与染液中各组分之间的作用力。 …

创建存储过程时出现的This function has none of DETERMINISTIC, NO SQL解决办法

This function has none of DETERMINISTIC, NO SQL解决办法创建存储过程时 出错信息&#xff1a; ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the …

如何让没有安装网页中所需字体的用户也能得到一致的浏览效果【转】

今天给大家谈一个关于字体的话题,我们在做项目的过程中会遇到一些在psd中的字体在自己的电脑中没有安装&#xff0c;或者是一些特殊的文字&#xff0c;通常的做法是把它切成图片&#xff0c;但是如果这个站是多个语言的&#xff0c;那我们是不是把每个语言的都切一张图片呢&…

【视觉项目】【day4】8.24号实验记录(消除瓶子内部“边缘”)

思路分析以及代码 思路1&#xff1a;使用findContours函数&#xff0c;设置轮廓为最外部RETR_EXTERNAL&#xff0c;结果发现结果仍然是所有轮廓。 思路2&#xff1a;先二值化&#xff0c;然后进行闭操作&#xff0c;然后canny&#xff0c;得到的轮廓确实比之前少很多&#xff…

operator.ne_Python operator.ne()函数与示例

operator.neoperator.ne()函数 (operator.ne() Function) operator.ne() function is a library function of operator module, it is used to perform "not equal to operation" on two values and returns True if the first value is not equal to the second val…

国产操作系统和linux 之间的关系,为何国产系统大多基于开源Linux?操作系统从0做起到底有多难?...

今年貌似是国产操作系统的“爆发”之年&#xff0c;除了老牌的银河麒麟、中标麒麟、深度之外&#xff0c;中兴近日发布了自己的“新支点”&#xff0c;华为也公开了自研的操作系统“鸿蒙”。纵观这些国产操作系统&#xff0c;大多基于开源的Linux。那么为什么我们不可以从0开始…

away3d创建基础view世界(基础 一)

对于away3d可能很多人有畏惧心里&#xff0c;其实away3d没有想象中的那么难&#xff0c;现在我就教大家创建一个简单的view世界。 package{import away3d.containers.View3D;import flash.display.Sprite;public class Main extends Sprite{private var view:View3D;//兴建一个…

operator.eq_Python operator.eq()函数与示例

operator.eqoperator.eq()函数 (operator.eq() Function) operator.eq() function is a library function of operator module, it is used to perform "equal to operation" on two values and returns True if the first value is equal to the second value, Fals…

智能车复工日记【7】:关于会车的图像问题

目录 系列文章更换扫线方式获取车的轮廓车屁股所在行数确定白色球台导致的问题5.21思考1、 关于会车地点确定如何判断会车状态博主联系方式: QQ:1540984562 QQ交流群:892023501 群里会有往届的smarters和电赛选手,群里也会不时分享一些有用的资料,有问题可以在群里多问问。…

详解Spring 3.0 基于Annotation 的依赖注入实现

简介&#xff1a; Spring 的依赖配置方式与 Spring 框架的内核自身是松耦合设计的。然而&#xff0c;直到 Spring 3.0 以前&#xff0c;使用 XML 进行依赖配置几乎是唯一的选择。Spring 3.0 的出现改变了这一状况&#xff0c;它提供了一系列的针对依赖注入的注解&#xff0c;这…

linux如何停用xdmcp服务,如何禁用XDMCP服务

看你用到是什么linux版本&#xff0c;例如下面&#xff1a;For kdm (which comes with the KDE desktop), it is a replacement of xdm and configures the same way, except its files are in /etc/X11/kdm in Caldera/SCO, /etc/kde/kdm in Red Hat (and Fedora Core) and /u…

第一章 基础知识

这篇博文是本人在学习《Python基础教程 &#xff08;第3版&#xff09;》的时候所记录下来的关键要点&#xff0c;书中的核心知识点也都在本篇博客中所涉及&#xff0c;需要耐心每天坚持点点滴滴学习进步 第一章 基础知识 数和表达式 1&#xff0c;执行整除运算// 4//3 —&…