博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
opencv-车牌区域提取
阅读量:6570 次
发布时间:2019-06-24

本文共 2530 字,大约阅读时间需要 8 分钟。

hot3.png

#include "opencv2/highgui/highgui.hpp"#include "opencv2/features2d/features2d.hpp"#include "opencv2/imgproc/imgproc.hpp"#include 
// Mser车牌目标检测std::vector
mserGetPlate(cv::Mat srcImage){ // HSV空间转换 cv::Mat gray, gray_neg; cv::Mat hsi; cv::cvtColor(srcImage, hsi, CV_BGR2HSV); // 通道分离 std::vector
channels; cv::split(hsi, channels); // 提取h通道 gray = channels[1]; // 灰度转换 cv::cvtColor(srcImage, gray, CV_BGR2GRAY); // 取反值灰度 gray_neg = 255 - gray; std::vector
> regContours; std::vector
> charContours; // MSER+操作 cv::MSER(2, 10, 5000, 0.5, 0.3)(gray, regContours); // MSER-操作 cv::MSER(2, 2, 400, 0.1, 0.3)(gray_neg, charContours); cv::Mat mserMapMat = cv::Mat::zeros(srcImage.size(), CV_8UC1); cv::Mat mserNegMapMat = cv::Mat::zeros(srcImage.size(), CV_8UC1); // MSER+ 检测 for(int i = (int)regContours.size()-1; i >= 0; i--) { // 根据检测区域点生成mser+结果 const std::vector
& r = regContours[i]; for (int j = 0; j < (int)r.size(); j++ ) { cv::Point pt = r[j]; mserMapMat.at
(pt) = 255; } } // MSER- 检测 for(int i = (int)charContours.size()-1; i >= 0; i--) { // 根据检测区域点生成mser-结果 const std::vector
& r = charContours[i]; for (int j = 0; j < (int)r.size(); j++ ) { cv::Point pt = r[j]; mserNegMapMat.at
(pt) = 255; } } // mser结果输出 cv::Mat mserResMat; // mser+与mser-位与操作 mserResMat= mserMapMat & mserNegMapMat; cv::imshow("mserMapMat", mserMapMat); cv::imshow("mserNegMapMat", mserNegMapMat); cv::imshow("mserResMat", mserResMat); // 闭操作连接缝隙 cv::Mat mserClosedMat; cv::morphologyEx(mserResMat, mserClosedMat, cv::MORPH_CLOSE, cv::Mat::ones(1, 20, CV_8UC1)); cv::imshow("mserClosedMat", mserClosedMat); // 寻找外部轮廓 std::vector
> plate_contours; cv::findContours(mserClosedMat, plate_contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, cv::Point(0, 0)); // 候选车牌区域判断输出 std::vector
candidates; for (size_t i = 0; i != plate_contours.size(); ++i) { // 求解最小外界矩形 cv::Rect rect = cv::boundingRect(plate_contours[i]); // 宽高比例 double wh_ratio = rect.width / double(rect.height); // 不符合尺寸条件判断 if (rect.height > 20 && wh_ratio > 4 && wh_ratio < 7) candidates.push_back(rect); } return candidates;}int main() { cv::Mat srcImage = cv::imread("car.jpg"); if(srcImage .empty()) return-1; // 候选车牌区域检测 std::vector
candidates; candidates = mserGetPlate(srcImage); // 车牌区域显示 for (int i = 0; i < candidates.size(); ++i) { cv::imshow("rect", srcImage(candidates[i])); cv::waitKey(); } return 0;}

原图

效果图

http://lib.csdn/base/

转载于:https://my.oschina.net/u/1426828/blog/793423

你可能感兴趣的文章
guzz批量更新程序
查看>>
范畴:组合的本质
查看>>
中国北方国际射击场
查看>>
我的友情链接
查看>>
2014-02-14 元宵夜晚
查看>>
Mysql备份到Windows共享路径中
查看>>
vmware中修改虚拟机MAC地址的方法!
查看>>
去掉esxi开启ssh后主机上的黄感叹号。
查看>>
Python OpenCV 学习笔记之:基本操作
查看>>
2012年12月上旬国外最佳虚拟主机提供商Top5
查看>>
IDC评述网:2013年11月份中国域名服务商Top25
查看>>
域名商2014年度报告: 新网互联域名总量降至28.5万
查看>>
6月“.中国”域名总量净减2,124个 降幅增大82.32%
查看>>
9月Web服务器份额:Microsoft第二 份额涨3.22%
查看>>
Python日期操作
查看>>
基于Silverlight的新浪微博客户端 - LightBus
查看>>
我的友情链接
查看>>
在ubuntu中安装谷歌浏览器
查看>>
【新功能】MaxCompoute禁止Full Scan功能开放
查看>>
输出倒三角形
查看>>