OpenCV学习(二十) :直方图匹配、对比:calcHist(),minMaxLoc(),compareHist()

直方图匹配、对比:calcHist ,minMaxLoc,compareHist

      • 1、calcHist()函数
      • 2、归一化:normalize()函数
      • 3、minMaxLoc()函数
      • 4、compareHist()函数
      • 5、示例一:H-S彩色图像的色调、饱和度二维直方图绘制
      • 6、示例二:灰度值一维直方图绘制
      • 7、示例三:三灰度值一维直方图绘制
      • 8、示例四:直方图相识度对比

参考博客:
灰度直方图(一维直方图)calcHist()函数、minMaxLoc()函数、normalize()函数
直方图(Histogram)又称柱状图、质量分布图,是一种统计报告图。直方图由一系列高度不等的纵向条纹或线段表示数据分布的情况。一般用横轴表示数据类型,纵轴表示分布情况。在图像处理上,直方图是图像信息统计的有力工具

1、calcHist()函数

用于计算一个或者多个这列的直方图

void calcHist(
const Mat* images, 		// 输入的数组或数组集	CV_8U 或CV_32F
int nimages,			// 输入数组的个数	(几幅图像)
const int* channels, 	// 需要统计直方图的第几通道(dim)
InputArray mask, 		// 掩膜,计算掩膜内的直方图
OutputArray hist, 		// 输出的直方图数组,一个二维数组
int dims, 				// 需要统计直方图通道的个数(需要统计的特征的数目)
const int* histSize, 	//  bin的个数,指的是直方图分成多少个区间
const float** ranges,	// 每一维数值的取值范围,统计像素值得区间如:[0,255]
bool uniform=true, 		// 是否对得到的直方图数组进行归一化处理	
bool accumulate=false 	// 在多个图像时,是否累计计算像素值得个数
)

2、归一化:normalize()函数

查找数组中的全局最小值和最大值。

void normalize( 
InputArray src, 		// 输入数组(图像)
OutputArray dst, 		// 输出数组(图像),与输入图像类型尺寸一样
double alpha=1, 		// 表示range normalization模式的最小值。
double beta=0,			// 表示range normalization模式的最大值,不用于norm normalization(范数归一化)模式。
int norm_type=NORM_L2, 	// 表示归一化的类型,可以有以下的取值:// NORM_MINMAX:数组的数值被平移或缩放到一个指定的范围,线性归一化,一般较常用。// NORM_INF:此类型的定义没有查到,根据OpenCV 1的对应项,可能是归一化数组的C-范数(绝对值的最大值)。// NORM_L1:归一化数组的L1-范数(绝对值的和)。// NORM_L2:归一化数组的(欧几里德)L2-范数。
int dtype=-1, 			// dtype为负数时,输出数组的type与输入数组的type相同;否则,输出数组与输入数组只是通道数相同,而tpye=CV_MAT_DEPTH(dtype)。
InputArray mask=noArray()	// 操作掩膜,用于指示函数是否仅仅对指定的元素进行操作。
);

3、minMaxLoc()函数

寻找矩阵(一维数组当作向量,用Mat定义) 中最小值和最大值的位置。
minMaxLoc函数的其他应用:
寻找一幅图像的匹配的模板,可以在一段视频里寻找出我们感兴趣的东西,比如条形码的识别就可能需要这样类似的一个工作提取出条形码区域(当然这样的方法并不鲁棒)。而OpenCV已经为我们集成好了相关的功能。函数为matchTemplate。
所谓模板匹配就是在一幅图像中寻找和模板图像(patch)最相似的区域。该函数的功能为,在输入源图像Source image(I)中滑动框,寻找各个位置与模板图像Template image(T)的相似度,并将结果保存在结果矩阵result matrix(R)中。该矩阵的每一个点的亮度表示与模板T的匹配程度。然后可以通过函数minMaxLoc定位矩阵R中的最大值(该函数也可以确定最小值)。

void cv::minMaxLoc(	
InputArray 	src,				// 输入单通道阵列
double * 	minVal,				// 指向返回的最小值的指针;如果不需要,则使用NULL。
double * 	maxVal = 0,			// 指向返回的最大值的指针;如果不需要,则使用NULL。	
Point * 	minLoc = 0,			// 指向返回的最小位置的指针(二维情况下);如果不需要,则使用NULL。
Point * 	maxLoc = 0,			// 指向返回的最大位置的指针(二维情况下);如果不需要,则使用NULL。
InputArray 	mask = noArray() 	// 用于选择子数组的可选掩码。
)	

4、compareHist()函数

对输入的两张图像进行直方图均衡化及直方图计算步骤后,可以对两个图像的直方图进行对比,并通过对比的结果得到一些我们想要的结论。
直方图比较应用
1)图像相似度比较
如果我们有两张图像,并且这两张图像的直方图一样,或者有极高的相似度,那么在一定程度上,我们可以认为这两幅图是一样的,这就是直方图比较的应用之一。
2)分析图像之间关系
两张图像的直方图反映了该图像像素的分布情况,可以利用图像的直方图,来分析两张图像的关系。

// 原型一
double compareHist(
InputArray H1, 	// 第一个直方图
InputArray H2,	// 第二,比较与H1大小相同的直方图(直方图尺寸相同,图片可以不同)
int method		// 
)     // 原型二
double compareHist(
const SparseMat &H1,
const SparseMat &H2,
int method
) 

4种衡量直方图相似度的对比标准:(H1表示第一直方图,H2第二直方图)

OpenCv提供了5种对比直方图的方式:CORREL(相关)、CHISQR(卡方)、INTERSECT(相交)、BHATTACHARYYA、EMD(最小工作距离),其中CHISQR速度最快,EMD速度最慢且有诸多限制,但是EMD的效果最好

1).相关系数的标准,Correlation(method=CV_COMP_CORREL)值越大,相关度越高,最大值为1,最小值为0;且N等于直方图中bin的个数。
在这里插入图片描述
2).卡方系数的标准(method=CV_COMP_CHISQR)值越小,相关度越高,最大值无上界,最小值0;
在这里插入图片描述
c.相交系数的标准(method=CV_COMP_INTERSECT)值越大,相关度越高,最大值为9.455319,最小值为0;
在这里插入图片描述

d.巴氏系数(Bhattacharyya)的标准(method=CV_COMP_BHATTACHARYYA)值越小,相关度越高,最大值为1,最小值为0
在这里插入图片描述

在这里插入图片描述

5、示例一:H-S彩色图像的色调、饱和度二维直方图绘制

#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;int main()
{//1、载入源图,转化为HSV颜色空间(2通道,故统计两中特征两:色调,饱和度)Mat srcImage, hsvImage;srcImage = imread("F:/C++/2. OPENCV 3.1.0/TEST/1.jpg", 1);if(!srcImage.data ) { printf("读取图片错误,请确定目录下是否有imread函数指定图片存在~! \n"); return false; }cvtColor(srcImage,hsvImage, CV_BGR2HSV);// 2、参数准备//将色调量化为30个等级,将饱和度量化为32个等级int hueBinNum = 30;             // 色调的直方图直条数量int saturationBinNum = 32;   // 饱和度的直方图直条数量int histSize[ ] = {hueBinNum, saturationBinNum};// 定义色调的变化范围为0到179// 定义饱和度的变化范围为0(黑、白、灰)到255(纯光谱颜色)float hueRanges[] = { 0, 180 };float saturationRanges[] = { 0, 256 };const float* ranges[] = { hueRanges, saturationRanges };MatND dstHist;//参数准备,calcHist函数中将计算第0通道和第1通道的直方图int channels[] = {0, 1};// 3、正式调用calcHist,进行直方图计算calcHist( &hsvImage,         		   // 输入的数组1,                                 // 数组个数为1channels,                          // 通道索引 0, 1 通道Mat(),                             // 不使用掩膜dstHist,                           // 输出的目标直方图2,                                 // 需要计算的直方图的维度为2histSize,                          // 存放每个维度的直方图尺寸的数组ranges,                            // 每一维数值的取值范围数组true,                              // 指示直方图是否均匀的标识符,true表示均匀的直方图false );                           // 累计标识符,false表示直方图在配置阶段会被清零// 4、为绘制直方图准备参数double maxValue=0;//最大值minMaxLoc(dstHist, 0, &maxValue, 0, 0);//查找数组和子数组的全局最小值和最大值存入maxValue中int scale = 10;Mat histImg = Mat::zeros(saturationBinNum*scale, hueBinNum*10, CV_8UC3);// 5、双层循环,进行直方图绘制for( int hue = 0; hue < hueBinNum; hue++ )for( int saturation = 0; saturation < saturationBinNum; saturation++ ){float binValue = dstHist.at<float>(hue, saturation);    //直方图组距的值int intensity = cvRound(binValue*255/maxValue);     	//强度//正式进行绘制rectangle( histImg, Point(hue*scale, saturation*scale),Point( (hue+1)*scale - 1, (saturation+1)*scale - 1),Scalar::all(intensity),CV_FILLED );}// 6、显示效果图imshow( "素材图", srcImage );imshow( "H-S 直方图", histImg );waitKey(0);return 0;
}

结果:
在这里插入图片描述

6、示例二:灰度值一维直方图绘制

#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;int main(int argc, char *argv[])
{//1、载入源图,转化为灰度图(1通道,故只统计一种特征量:灰度值)Mat srcImage;srcImage = imread("F:/C++/2. OPENCV 3.1.0/TEST/1.jpg", 1);if(!srcImage.data ) { printf("读取图片错误,请确定目录下是否有imread函数指定图片存在~! \n"); return false; }cvtColor(srcImage,srcImage, CV_BGR2GRAY);imshow("原图",srcImage);// 2、定义变量MatND dstHist;                                  // 输出的二维目标直方图,二维数组int dims = 1;                                   // 统计的特征数目(仅灰度值)float hranges[] = {0, 255};                		// 每一维数值的取值范围const float *ranges[] = {hranges};    			// 这里需要为const类型int size = 256;                                 // 每个维度直方图尺寸int channels = 0;// 3、计算图像的直方图calcHist(&srcImage, 1, &channels, Mat(), dstHist, dims, &size, ranges);    // cv 中是cvCalcHistint scale = 1;Mat dstImage(size * scale, size, CV_8U, Scalar(0));// 4、获取最大值和最小值double minValue = 0;double maxValue = 0;minMaxLoc(dstHist,&minValue, &maxValue, 0, 0);  //  在cv中用的是cvGetMinMaxHistValue// 5、绘制出直方图int hpt = saturate_cast<int>(0.9 * size);for(int i = 0; i < 256; i++){float binValue = dstHist.at<float>(i);           //   注意hist中是float类型int realValue = saturate_cast<int>(binValue * hpt/maxValue);rectangle(dstImage,Point(i*scale, size - 1), Point((i+1)*scale - 1, size - realValue), Scalar(255));}imshow("一维直方图", dstImage);waitKey(0);return a.exec();
}

结果:
在这里插入图片描述在这里插入图片描述

7、示例三:三灰度值一维直方图绘制

#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 1、载入源图,转化为HSV颜色模型Mat srcImage;srcImage = imread("F:/C++/2. OPENCV 3.1.0/TEST/1.jpg", 1);if(!srcImage.data ) { printf("读取图片错误,请确定目录下是否有imread函数指定图片存在~! \n"); return false; }imshow("原图",srcImage);// 2、参数准备int bins = 256;int hist_size[] = {bins};float range[] = { 0, 256 };const float* ranges[] = { range};MatND redHist,greenHist,blueHist;// 3、进行直方图的计算(红色分量部分)// 4、进行直方图的计算(绿色分量部分)// 5、进行直方图的计算(蓝色分量部分)int channels_r[] = {0};int channels_g[] = {1};int channels_b[] = {2};calcHist( &srcImage, 1, channels_r, Mat(), redHist, 1, hist_size, ranges,true,false );calcHist( &srcImage, 1, channels_g, Mat(), greenHist, 1, hist_size, ranges, true,false );calcHist( &srcImage, 1, channels_b, Mat(), blueHist, 1, hist_size, ranges,true,false );//-----------------------绘制出三色直方图------------------------
//       // 1、参数准备
//       double maxValue_red,maxValue_green,maxValue_blue;
//       minMaxLoc(redHist, 0, &maxValue_red, 0, 0);
//       minMaxLoc(grayHist, 0, &maxValue_green, 0, 0);
//       minMaxLoc(blueHist, 0, &maxValue_blue, 0, 0);
//       int scale = 1;
//       int histHeight=256;
//       Mat histImage = Mat::zeros(histHeight,bins*3, CV_8UC3);  // 创建直方图背景图//       // 2、正式开始绘制
//       for(int i=0;i<bins;i++)
//       {
//           // 2.1 参数准备
//           float binValue_red = redHist.at<float>(i);
//           float binValue_green = grayHist.at<float>(i);
//           float binValue_blue = blueHist.at<float>(i);
//           int intensity_red = cvRound(binValue_red*histHeight/maxValue_red);  //要绘制的高度
//           int intensity_green = cvRound(binValue_green*histHeight/maxValue_green);  //要绘制的高度
//           int intensity_blue = cvRound(binValue_blue*histHeight/maxValue_blue);  //要绘制的高度//           // 2.2 绘制红色分量的直方图
//           rectangle(histImage,Point(i*scale,histHeight-1),
//               Point((i+1)*scale - 1, histHeight - intensity_red),
//               CV_RGB(255,0,0));//           // 2.3绘制绿色分量的直方图
//           rectangle(histImage,Point((i+bins)*scale,histHeight-1),
//               Point((i+bins+1)*scale - 1, histHeight - intensity_green),
//               CV_RGB(0,255,0));//           // 2.4绘制蓝色分量的直方图
//           rectangle(histImage,Point((i+bins*2)*scale,histHeight-1),
//               Point((i+bins*2+1)*scale - 1, histHeight - intensity_blue),
//               CV_RGB(0,0,255));//       }
//       // 3、在窗口中显示出绘制好的直方图
//       imshow( "图像的RGB直方图", histImage );//-----------------------绘制出三色折线图------------------------int histWidth = 800;     // 直方图 宽int histHeight = 512;    // 直方图 高int binWidth = cvRound((double)histWidth/bins);  // 每直条(组距)宽,取整Mat histImage(histHeight,histWidth,CV_8UC3,Scalar(0,0,0));//归一化处理normalize()函数的参数解析见后面normalize(redHist,redHist,0,histImage.rows,NORM_MINMAX,-1,Mat());normalize(greenHist,greenHist,0,histImage.rows,NORM_MINMAX,-1,Mat());normalize(blueHist,blueHist,0,histImage.rows,NORM_MINMAX,-1,Mat());//画直方图for( int i = 1; i < bins; i++ ){line( histImage, Point( binWidth*(i-1), histHeight - cvRound(redHist.at<float>(i-1)) ) ,Point( binWidth*(i), histHeight - cvRound(redHist.at<float>(i)) ),Scalar( 0, 0, 255), 2, 8, 0  );line( histImage, Point( binWidth*(i-1), histHeight - cvRound(greenHist.at<float>(i-1)) ) ,Point( binWidth*(i), histHeight - cvRound(greenHist.at<float>(i)) ),Scalar( 0, 255, 0), 2, 8, 0  );line( histImage, Point( binWidth*(i-1), histHeight - cvRound(blueHist.at<float>(i-1)) ) ,Point( binWidth*(i), histHeight - cvRound(blueHist.at<float>(i)) ),Scalar( 255, 0, 0), 2, 8, 0  );}// 显示直方图imshow("图像的RGB折线图", histImage );waitKey(0);return a.exec();
}

结果:

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

8、示例四:直方图相识度对比

#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;string convertToString(double d)
{ostringstream os;if (os<<d){return os.str();}return "invalid conversion";
}int main()
{// 1、声明储存基准图像和另外两张对比图像的矩阵( RGB 和 HSV )Mat srcImage_base, hsvImage_base;Mat srcImage_test1, hsvImage_test1;Mat srcImage_test2, hsvImage_test2;Mat hsvImage_halfDown;// 2、载入基准图像(srcImage_base) 和两张测试图像srcImage_test1、srcImage_test2,并显示srcImage_base = imread( "F:/C++/2. OPENCV 3.1.0/TEST/q.jpg",1 );srcImage_test1 = imread( "F:/C++/2. OPENCV 3.1.0/TEST/w.jpg", 1 );srcImage_test2 = imread( "F:/C++/2. OPENCV 3.1.0/TEST/e.jpg", 1 );// 3、将图像由BGR色彩空间转换到 HSV色彩空间cvtColor( srcImage_base, hsvImage_base, CV_BGR2HSV );cvtColor( srcImage_test1, hsvImage_test1, CV_BGR2HSV );cvtColor( srcImage_test2, hsvImage_test2, CV_BGR2HSV );// 4、创建包含基准图像下半部的半身图像(HSV格式)hsvImage_halfDown = hsvImage_base( Range( hsvImage_base.rows/2, hsvImage_base.rows - 1 ), Range( 0, hsvImage_base.cols - 1 ) );// 5、初始化计算直方图需要的实参// 对hue通道使用30个bin,对saturatoin通道使用32个binint h_bins = 30; int s_bins = 60;int histSize[] = { h_bins, s_bins };// hue的取值范围从0到256, saturation取值范围从0到180float h_ranges[] = { 0, 256 };float s_ranges[] = { 0, 180 };const float* ranges[] = { h_ranges, s_ranges };// 使用第0和第1通道int channels[] = { 0, 1 };// 6、创建储存直方图的 MatND 类的实例:MatND baseHist;MatND halfDownHist;MatND testHist1;MatND testHist2;//7、计算基准图像,两张测试图像,半身基准图像的HSV直方图:calcHist( &hsvImage_base, 1, channels, Mat(), baseHist, 2, histSize, ranges, true, false );normalize( baseHist, baseHist, 0, 1, NORM_MINMAX, -1, Mat() );calcHist( &hsvImage_halfDown, 1, channels, Mat(), halfDownHist, 2, histSize, ranges, true, false );normalize( halfDownHist, halfDownHist, 0, 1, NORM_MINMAX, -1, Mat() );calcHist( &hsvImage_test1, 1, channels, Mat(), testHist1, 2, histSize, ranges, true, false );normalize( testHist1, testHist1, 0, 1, NORM_MINMAX, -1, Mat() );calcHist( &hsvImage_test2, 1, channels, Mat(), testHist2, 2, histSize, ranges, true, false );normalize( testHist2, testHist2, 0, 1, NORM_MINMAX, -1, Mat() );// 8、按顺序使用4种对比标准将基准图像的直方图与其余各直方图进行对比:for( int i = 0; i < 4; i++ ){//进行图像直方图的对比int compare_method = i;double base_base = compareHist( baseHist, baseHist, compare_method );double base_half = compareHist( baseHist, halfDownHist, compare_method );double base_test1 = compareHist( baseHist, testHist1, compare_method );double base_test2 = compareHist( baseHist, testHist2, compare_method );//给每个图像上添加文字,内容为该图片和原始图片的比较结果int j=i+1;putText(srcImage_base, convertToString(base_base), Point(50, 50*j), CV_FONT_HERSHEY_COMPLEX, 1, Scalar(0, 255, 255), 2, LINE_AA);putText(hsvImage_halfDown, convertToString(base_half),  Point(50, 50*j), CV_FONT_HERSHEY_COMPLEX, 1, Scalar(0, 255, 255), 2, LINE_AA);putText(srcImage_test1, convertToString(base_test1),  Point(50, 50*j), CV_FONT_HERSHEY_COMPLEX, 1, Scalar(0, 0, 255), 2, LINE_AA);putText(srcImage_test2, convertToString(base_test2), Point(50, 50*j), CV_FONT_HERSHEY_COMPLEX, 1, Scalar(255, 0, 255), 2, LINE_AA);//输出结果printf( " 方法 [%d] 的匹配结果如下:\n\n 【基准图 - 基准图】:%f,   【基准图 - 半身图】:%f,\n【基准图 - 测试图1】:%f,  【基准图 - 测试图2】:%f \n-----------------------------------------------------------------\n", i, base_base, base_half , base_test1, base_test2 );}//显示载入的3张图像imshow("基准图像",srcImage_base);imshow("测试图像1",srcImage_test1);imshow("测试图像2",srcImage_test2);imshow("下半部的半身图像",hsvImage_halfDown);waitKey(0);return 0;
}

结果:
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Intel和IBM押重注的神经模态计算,会给行业带来什么样的变化

Intel发布的Pohoiki Beach加速卡&#xff0c;含有64块Loihi芯片来源&#xff1a; 半导体行业观察上周&#xff0c;Intel发布了基于其神经模态&#xff08;neuromorphic&#xff09;计算芯片Loihi的加速卡Pohoiki Beach&#xff0c;该加速卡包含了64块Loihi芯片&#xff0c;共含…

OpenCV学习(二十二) :反向投影:calcBackProject(),mixChannels()

OpenCV学习(二十二) &#xff1a;反向投影:calcHist(),minMaxLoc(),compareHist() 参考博客&#xff1a; 反向投影backproject的直观理解 opencv 反向投影 颜色直方图的计算、显示、处理、对比及反向投影 一、概述 1、官方解释&#xff1a;反向投影是一种记录给定图像中的像…

美国正式宣告将在月球建立永久存在基地

来源&#xff1a;凤凰新闻央视网消息&#xff1a;7月20号是人类首次载人登陆月球50周年纪念日&#xff0c;美国公布了“阿尔忒弥斯计划”的官方标志图案&#xff0c;正式宣告将在月球建立永久存在基地。美国媒体直呼&#xff0c;美国要“占领”月球了。1969年&#xff0c;美国的…

一文看懂5G芯片背后的明争暗斗

来源&#xff1a;鲜枣课堂6月6日工信部正式发放5G商用牌照之后&#xff0c;国内5G网络建设的步伐大幅加快了。越来越多的城市出现了5G基站和5G信号&#xff0c;5G离我们的距离更近了。面对激动人心的5G&#xff0c;我们普通用户最关心的问题&#xff0c;当然是什么时候才能用上…

OpenCV学习(二十三) :模板匹配:matchTemplate(),minMaxLoc()

OpenCV学习(二十三) &#xff1a;模板匹配:matchTemplate() 1、概述 模板匹配是一种最原始、最基本的模式识别方法&#xff0c;研究某一特定对象物的图案位于图像的什么地方&#xff0c;进而识别对象物&#xff0c;这就是一个匹配问题。 它是图像处理中最基本、最常用的匹配方…

CSS3实现图形曲线阴形和翘边阴影

首先&#xff0c;来看看完成之后的效果图&#xff1a; 实现原理 ①曲线阴影实现&#xff1a; 多个阴影重叠&#xff0c;就是正常阴影曲线阴影 正常情况下&#xff0c;有个矩形有正常的阴影&#xff0c;作为主投影&#xff0c;这时候再定义一个有一定弧度圆角的圆角矩形&#xf…

腾飞资本任溶 :互联网大脑,新的天方夜谭?—评《崛起的超级智能》

作者&#xff1a;任 溶 腾飞资本董事长&#xff0c;城市大脑创新合伙人基金管理合伙人因为我做科技产业投资工作&#xff0c;投资领域涉及互联网等新经济、新模式和新技术等&#xff0c;所以这几年总是听到一些言论&#xff0c;诸如“互联网已死”&#xff0c;或者“互联网红利…

OpenCV学习(二十四 ):角点检测(Corner Detection):cornerHarris(),goodFeatureToTrack()

OpenCV学习(二十四 &#xff09;&#xff1a;角点检测(Corner Detection):cornerHarris(),goodFeatureToTrack() 参考博客&#xff1a; Harris角点检测原理详解 Harris角点检测原理及C实现 OpenCV亚像素角点cornerSubPixel()源代码分析 Taylor公式&#xff08;泰勒公式&#x…

无人驾驶技术的7大典型应用场景

来源 | 数据观综合无人驾驶风口来临&#xff0c;引得各方资本竞相追逐。据业内预测&#xff0c;2019年到2020年无人驾驶L3&#xff08;条件自动&#xff09;级别的汽车将实现量产化&#xff0c;2022年后部分企业将实现L4&#xff08;高度自动&#xff09;量产&#xff0c;若要实…

数字图像处理学习笔记(一):特征检测和匹配概述

数字图像处理学习笔记&#xff08;一&#xff09;&#xff1a;特征检测和匹配概述 参考博客&#xff1a; 特征点的匹配SIFT特征详解数字图像处理学习笔记&#xff08;二&#xff09;&#xff1a;SIFT&#xff08;尺度不变特征变换&#xff09;算法 1、特征点概述 如何高效且…

数字图像处理学习笔记(二):SIFT(尺度不变特征变换)算法

数字图像处理学习笔记&#xff08;二&#xff09;&#xff1a;SIFT&#xff08;尺度不变特征变换&#xff09;算法 一、概述&#xff1a; 提到特征点算法&#xff0c;首先就是大名鼎鼎的SIFT算法了。SIFT的全称是Scale Invariant Feature Transform&#xff0c;尺度不变特征变…

微软向马斯克的人工智能公司OpenAI投资10亿美元

来源: 新浪财经新浪美股讯微软(Microsoft)周一宣布&#xff0c;将向埃隆-马斯克(Elon Musk)的OpenAI投资10亿美元&#xff0c;打造能够处理更复杂任务的人工智能。根据声明&#xff0c;通过合作&#xff0c;两家公司将建立新的Azure AI超级计算技术&#xff0c;微软将成为OpenA…

数字图像处理学习笔记(三):ORB算法(尺度不变特征变换)Oriented FAST and Rotated BRIEF

数字图像处理学习笔记&#xff08;三&#xff09;&#xff1a;ORB算法&#xff08;尺度不变特征变换&#xff09;Oriented FAST and Rotated BRIEF 一、概述 参考&#xff1a;特征点匹配特征检测方法汇总 ORB的全称是Oriented FAST and Rotated BRIEF&#xff0c;是目前来说…

华为:对部分顶尖学生实行年薪制 最高200万元

来源&#xff1a;EETOP7月23日上午消息&#xff0c;据华为总裁办签发的电子邮件&#xff0c;华为对部分2019届顶尖学生实行年薪制管理。华为以电邮通知【2019】068号文发布了8名天才少年的年薪方案&#xff0c;这8名人员全部为2019届应届顶尖学生&#xff0c;其年薪的最低限为8…

matplotlib使用GridSpec自定义子图位置 (非对称的子图)

上图的结构可以用一下两种方式画&#xff1a; import matplotlib.pyplot as plt from matplotlib.gridspec import GridSpecfig plt.figure(1) gs GridSpec(3, 3)ax1 plt.subplot(gs[0, :]) ax2 plt.subplot(gs[1, :2]) ax3 plt.subplot(gs[1:, 2]) ax4 plt.subplot(gs[…

大脑简史(1)-历史上的大事件

来源&#xff1a;人机与认知实验室能够上天入地&#xff0c;却不知道自己的大脑&#xff0c;笔者认为这是很多人的疑惑。随着科技的发展&#xff0c;我们能够延伸到的地方越来越多&#xff0c;无论是伸手不见五指的海底&#xff0c;还是扶摇直上九万里的浩渺星空&#xff0c;都…

作业3词频统计

(1). 实现一个控制台程序&#xff0c;给定一段英文字符串&#xff0c;统计其中各个英文单词&#xff08;4字符以上含4字符&#xff09;的出现频率。 答&#xff1a; 从文件读取遍历字符串大写转小写将句子分隔成一个个单词判断是否为单词计算单词出现的频率预估时间10minutes10…

MATLAB报错Invalid ADAPTORNAME specified. Type 'imaqhwinfo' for a list of available ADAPTORNAMEs. Image

MATLAB报错Invalid ADAPTORNAME specified. Type imaqhwinfo for a list of available ADAPTORNAMEs. Image acquisition adaptors may be available as downloadable support packages. Open Support Package Installer to install additional vendors. 这时需要安装两个安装…

陈天奇:十年机器学习科研之路(附链接)

来源&#xff1a;深度学习自然语言处理链接&#xff1a;https://zhuanlan.zhihu.com/p/74249758导读十年前&#xff0c;MSRA的夏天&#xff0c;刚开始尝试机器学习研究的我面对科研巨大的不确定性&#xff0c;感到最多的是困惑和迷茫。十年之后&#xff0c;即将跨出下一步的时候…

QT示例:基于TCP 点对多Socket通讯(server,clients)

QT示例&#xff1a;基于TCP 点对多通讯&#xff08;server,clients&#xff09;一、服务器server二、客户端Client下载&#xff1a;基于TCP 点对多Socket通讯 一、服务器server 因为对于客户端来说&#xff0c;只能连接一个服务器。而对于服务器来说&#xff0c;它是面向多连…