directory

  • Equalization code
  • The template images are sorted by size
  • The total code
  • The test results
  • New ideas

Since template matching is a comparison between pixels, the gray values of pixels under different lighting will be different. Therefore, before comparison, we need to carry out histogram equalization of the test graph and template graph, which can be achieved first. Batch processing will be used today to test the accuracy of template matching.

It is found that it is best to equalize all test diagrams before intercepting the template. It is not reasonable to equalize test diagrams and template diagrams separately. equalizeHist( src, dst ); This function only supports single channel equalization. For color images, multiple channels can be separated into a single channel and then combined into multiple channels.

Equalization code

for (int i = 0; i < filenames.size(a); i++) { srcImg = cv::imread(filenames[i]);
	/ / * * * * * * * * * * * * * * * * * * * * * * * * * for image processing part of the * * * * * * * * * * * * * * * * * * * * * * * * * * * /
	// Here we apply histogram equalization to the original image
	vector<Mat> channels;// Define the container for storage
	split(srcImg,channels);
	Mat bluechannel = channels[0];// The image of the b channel
	equalizeHist(bluechannel, bluechannel);/ / equalization
	Mat greenchannel = channels[1];// The image of the g channel
	equalizeHist(greenchannel, greenchannel);
	Mat redchannel = channels[2];// Image of r channel
	equalizeHist(redchannel, redchannel);
	merge(channels, dstImg);// Merge channels
	/ / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
	savedfilename = dest + filenames[i].substr(len);
	std::cout << savedfilename << std::endl;
	cv::imwrite(savedfilename, dstImg);
	cout << "The first" << i << "Zhang Finish" << endl;
	waitKey(30);
}
Copy the code

The template images are sorted by size

Sort the template image by pixel size, from largest to smallest. Prevents the partial misjudgment of the test map into a template with fewer pixels (this is because there are a lot of misjudgments found)

The total code

#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 [Program window]			
using namespace cv;
using namespace std;

// Display the estimated and actual values
void show_text(int nums, String real_name)
{
	if (nums == 0)
	{
		cout << "Speculation: Big brown bottle."<<""<< real_name << endl;
	}
	else if (nums == 1)
	{
		cout << "Conjecture: BAL" << "" << real_name << endl;
	}
	else if (nums == 2)
	{
		cout << "Conjecture: Square bottom and rounded shoulders." << "" << real_name << endl;
	}
	else if (nums == 3)
	{
		cout << "Speculation: Strip" << "" << real_name << endl;
	}
	else if (nums == 4)
	{
		cout << "Speculation: Round shoulders" << "" << real_name << endl;
	}
	else if(nums == 5)
	{
		cout << "Speculation: Barrel shoulder." << "" << real_name << endl;
	}
	else if (nums == 6)
	{
		cout << "Speculation: Multifaceted shoulders." << "" << real_name << endl;
	}
	else if (nums == 7)
	{
		cout << "Speculation: Fang Fang" << "" << real_name << endl;
	}
	else if (nums == 8)
	{
		cout << "Speculations: Little strips." << "" << real_name << endl;
	}
	else if (nums == 9)
	{
		cout << "Speculation: Bucket shoulder." << "" << real_name << endl;
	}
	else if (nums == 10)
	{
		cout << "Speculation: Small square shoulders." << "" << real_name << endl;
	}
	else if (nums ==11)
	{
		cout << "Conjecture: grape-shaped" << "" << real_name << endl;
	}
	else if (nums == 12)
	{
		cout << "Speculation: A little strip." << "" << real_name << endl;
	}
	else 
	{
		cout << "Conjecture: None" << ""<< real_name << endl; }}// Show the likelihood that each template will best match the test diagram
void show_probability(int nums, double probability)
{
	if (nums == 0)
	{
		cout << "Probability of a big brown bottle." << "" << probability << endl;
	}
	else if (nums == 1)
	{
		cout << "Probability of BAL" << "" << probability << endl;
	}
	else if (nums == 2)
	{
		cout << "Probability of square bottom and round shoulders" << "" << probability << endl;
	}
	else if (nums == 3)
	{
		cout << "Probability of a strip" << "" << probability << endl;
	}
	else if (nums == 4)
	{
		cout << "Probability of round shoulders" << "" << probability << endl;
	}
	else if (nums == 5)
	{
		cout << "Probability of barrel shoulder" << "" << probability << endl;
	}
	else if (nums == 6)
	{
		cout << "Probability of multiple shoulders" << "" << probability << endl;
	}
	else if (nums == 7)
	{
		cout << "Probability of square" << "" << probability << endl;
	}
	else if (nums == 8)
	{
		cout << "Probability of a small bar" << "" << probability << endl;
	}
	else if (nums == 9)
	{
		cout << "Probability of bucket shoulder" << "" << probability << endl;
	}
	else if (nums == 10)
	{
		cout << "Probability of small square shoulders" << "" << probability << endl;
	}
	else if (nums == 11)
	{
		cout << "Probability of grape shape" << "" << probability << endl;
	}
	else if (nums == 12)
	{
		cout << "Probability of a small bar" << "" << probability << endl;
	}
	else
	{
		cout << "Probability of none" << ""<< probability << endl; }}/ / main program
int main(a)
{
	// Change the console font color
	system("color 02");
	/ / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * [0] the test folder path and templates folder path * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
	// Get the test folder path and template folder path
	cv::String path_test = "D:/opencv_picture_test/ visual project resize folder/test folder/equalization test map /";        
	cv::String path_template = "D:/opencv_picture_test/ visual project resize folder/template folder/equalization template/";    
	cout << "Address obtained successfully" << endl;
	/ / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 【 1 】 to load the template image * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / /
	// Create a template vector
	vector<Mat>tempMat;
	// Insert template elements
	Mat srcImage;
	std::vector<cv::String> temp_filenames;
	cv::glob(path_template, temp_filenames);                 // OpencV is a very useful function to read the file name in the specified path
	for (int i = 0; i < temp_filenames.size(a); i++) { srcImage = cv::imread(temp_filenames[i]);
		tempMat.push_back(srcImage);
	}
	// Get the number of templates
	int tempMat_Nums = tempMat.size(a);/ / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * (2) load testing image * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / /
	// Create a test vector
	vector<Mat>testMat;
	// Insert the test element
	std::vector<cv::String> test_filenames;
	cv::glob(path_test, test_filenames);                 // OpencV is a very useful function to read the file name in the specified path
	for (int i = 0; i < test_filenames.size(a); i++) { srcImage = cv::imread(test_filenames[i]);
		testMat.push_back(srcImage);
	}
	// Get the number of test graphs
	int testMat_Nums = testMat.size(a);/ / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * [3] for each test pattern template matching * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / /
	for (int j = 0; j < testMat_Nums; j++) { cout <<"The first"<< j <<"The test of a test picture."<< endl;
		Mat resultMat;
		Mat dispMat;
		int match_method = TM_CCORR_NORMED;		// This parameter is found to be good after trial and error.
		// Use each template to match the test graph and find the best match for each result, storing the value in the vector
		vector<double>goodval;
		vector<Point>goodlock;
		int matchnum = 0;
		Point matchLoc;
		for (int i = 0; i < tempMat_Nums; i++) {// The larger the positive value is, the higher the matching degree will be, and the larger the negative value will be, the greater the difference between the image will be. However, if the image has no obvious features (i.e. the pixel value in the image is close to the average value), the closer the returned value will be to 0.
			matchTemplate(testMat[j], tempMat[i], resultMat, match_method);
			// Do not normalize, because the best value after normalization of different templates is 1, which cannot be compared
			//normalize(resultMat, resultMat, 0, 1, NORM_MINMAX, -1, Mat()); / / normalization
			double minVal; double maxVal; Point minLoc; Point maxLoc;	// Define the maximum and minimum values and their position variables
			minMaxLoc(resultMat, &minVal, &maxVal, &minLoc, &maxLoc, Mat());	// Find the maximum and minimum matching values from the result matrix and determine their positions
			// For both methods SQDIFF and SQDIFF_NORMED, smaller values have higher matching results
			// For the rest of the method, the larger the value, the better the match
			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;
		}
		// Find the best group of 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);
		// Draw a box of the same size as the template around the best match point
		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 allows users to scale freely
		imshow("testMat", dispMat);
		waitKey(30);
	}
	return 0;
}
Copy the code

The test results

获取地址成功

第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

New ideas

The teacher said consider industrial cameras or use edge-based NCC template matching.