栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ opencv识别油表数字

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ opencv识别油表数字

图片:

代码:

#include 
#include 
#include 
#include "utils.hpp"

using namespace std;
using namespace cv;

bool cmp(const Rect a, const Rect b)
{
	return a.x < b.x;
}

int main()
{
	Mat src_img, gray_img, gauss_img, threshold_img, ContrastImg;

	src_img = cv::imread("D:/images/numDect.jpg");
	cvShow("src_img", src_img);

	//2, 图像对比度增强
	ContrastImg = ContrastChange(src_img);
	cvShow("ContrastImg", ContrastImg);

	//3, 灰度化,高斯模糊
	cv::cvtColor(ContrastImg, gray_img, cv::COLOR_BGR2GRAY);
	cvShow("gray_img", gray_img);
	cv::GaussianBlur(gray_img, gauss_img, Size(5, 5), 1);
	cvShow("gauss_img", gauss_img);

	//4, 阈值处理
	cv::threshold(gauss_img, threshold_img, 0, 255, cv::THRESH_BINARY_INV | cv::THRESH_OTSU);
	cvShow("thresholdImg", threshold_img);

	//5,找轮廓
	vector> contours;
	cv::findContours(threshold_img, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
	Mat drawImg = src_img.clone();
	cv::drawContours(drawImg, contours, -1, Scalar(0, 0, 255), 2);
	cvShow("drawImg", drawImg);
	
	vector words;
	for (size_t i = 0; i < contours.size(); i++)
	{
		Rect rect = cv::boundingRect(contours[i]);
		words.push_back(rect);
	}
	sort(words.begin(), words.end(), cmp);

	for (size_t i = 0; i < words.size(); i++)
	{
		Mat sigleimg = src_img(words[i]);
		cvShow("sigleimg", sigleimg);
	}
	return 0;
}

函数cvShow

inline void cvShow(string name, Mat img)
{
    cv::imshow(name, img);
    cv::waitKey(0);
}

函数ContrastChange

# 图像对比度增强
inline Mat ContrastChange(Mat img)
{
    Mat alpha = (Mat_(1, 1) << 1.80);
    Mat dst_img;
    cv::multiply(img, alpha, dst_img);
    return dst_img;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/943055.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号