基于opencv的logo识别

发布时间:2026/10/29 1:14:01
基于opencv的logo识别 基于opencv的logo识别首先环境为visual studio 2012opencv3.2.0.大家尽量采用此环境opencv对于环境要求较高环境不同会一堆报错很难处理。1、opencv安装配置环境此节略过后续会补充在博客2、开始做logo识别。一个logo大致步骤先通过颜色区别将logo从整体环境中剥离出来。此处以美的logo做解释图一为原图图二为经过opencv 里的hsv变换的图片图三为针对蓝色做颜色过滤。经过此部分操作即可得到logo。3、然后针对logo部分转为轮廓化进行轮廓比对识别。图一为过滤出来的logo黑白二值图图二为轮廓图图三为logo中字母轮廓图四为用来比对的轮廓。黑色xin文字为相似度值越小代表相似度越高。至此即实现logo的检测及比对详细代码如下// opencv.cpp : 定义控制台应用程序的入口点。 // #include stdafx.h #include opencv2/opencv.hpp #include opencv2/core.hpp #include opencv2/highgui.hpp #include opencv2/imgproc.hpp #include opencv2/imgproc/imgproc_c.h #include iostream #include vector using namespace std; using namespace cv; /*int main() { //the path of test image Mat imgimread(C:\\Users\\14675\\Desktop\\扫码枪教程\\无标题h.png); namedWindow(dog); imshow(dog,img); waitKey(6000); // window closed after 6000 ms } */ int main() { /* //VideoCapture cap(0); while (true) { //Mat matSrc; //cap matSrc; //Mat matSrcimread(D://程序工程/opencv/x64/Debug/2.jpg,IMREAD_UNCHANGED); resize(matSrc, matSrc, Size(), 0.5, 0.5); Mat matHsv; //waitKey(2000); cvtColor(matSrc,matHsv,COLOR_BGR2HSV); Mat a,b,c,d,e; inRange(matSrc,Scalar(0, 0, 0),Scalar(180, 255, 46),a); medianBlur(a,b,3); medianBlur(b,c,5); Mat element getStructuringElement(MORPH_ELLIPSE, Size(2 * 1 1, 2 * 1 1), Point(1, 1)); Mat element1 getStructuringElement(MORPH_ELLIPSE, Size(2 * 3 1, 2 * 3 1), Point(3, 3)); erode(c, d, element);//腐蚀 imshow(显示灰度图,matSrc); imshow(显示灰度图1,matHsv); int ca waitKey(100);//按ESC则退出当前视频 if ((char)ca 27) { break; } }*/ //图片初始化 Mat matSrcimread(D://程序工程/opencv/x64/Debug/3.jpg,IMREAD_UNCHANGED); Mat matSrc2imread(D://程序工程/opencv/x64/Debug/4.jpg,IMREAD_UNCHANGED); //尺寸归一化 resize(matSrc, matSrc, Size(300,300), 1, 1); resize(matSrc2, matSrc2, Size(300,300), 1, 1); //imshow(显示灰度图1,matSrc); //hsv通道 Mat matHsv,matHsv2; cvtColor(matSrc,matHsv,COLOR_BGR2HSV); cvtColor(matSrc2,matHsv2,COLOR_BGR2HSV); //imshow(显示灰度图2,matHsv); //过滤蓝色二值化 Mat lan,lan2; inRange(matHsv,Scalar(35, 43, 46),Scalar(124, 255, 255),lan); inRange(matHsv2,Scalar(35, 43, 46),Scalar(124, 255, 255),lan2); imshow(显示灰度图3,lan); Mat fu,peng,fu2,peng2; Mat element getStructuringElement(MORPH_ELLIPSE, Size(2 * 1 1, 2 * 1 1), Point(1, 1)); erode(lan,fu, element);//腐蚀 dilate(lan, peng, element);//膨胀 erode(lan2,fu2, element);//腐蚀 dilate(lan2, peng2, element);//膨胀 peng-fu; peng2-fu2; lanpeng; lan2peng2; imshow(形态学1,lan); //提取轮廓 CvSeq *test_seqs; CvSeq *mode_seqs; vectorVec4i hierarchy,hierarchy2; vectorvectorPoint contours,contours2; findContours(lan,contours,hierarchy,RETR_TREE,CHAIN_APPROX_SIMPLE,Point());//提取轮廓元素 findContours(lan2,contours2,hierarchy2,RETR_TREE,CHAIN_APPROX_SIMPLE,Point());//提取轮廓元素 //绘制轮廓 drawContours(matSrc,contours, 1, Scalar(115), 3, 8, hierarchy); drawContours(matSrc2,contours2,3, Scalar(115), 3, 8, hierarchy2); imshow(形态学2,matSrc); imshow(形态学对比模板,matSrc2); double zhixinmatchShapes(contours[1],contours2[3],CV_CONTOURS_MATCH_I3,1.0); printf(轮廓一数目%d 轮廓二数目%d xin:%f,contours.size(),contours2.size(),zhixin); //cvMatchShapes(lan,lan2,1); //imshow(显示灰度图1,matSrc); //imshow(显示灰度图2,matSrc2); //Canny(lan, lan, 3, 9, 3); //Canny(lan2, lan2, 3, 9, 3); //imshow(显示灰度图3,lan); // imshow(显示灰度图4,lan2); waitKey(); }

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询