IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 使用OpenCV+ZBar实现多条形码识别 -> 正文阅读

[人工智能]使用OpenCV+ZBar实现多条形码识别

本工程是利用OpenCV4.5.4进行图像预处理,将条形码找到并送进ZBar进行识别
目前能实现对干扰少的多条形码图片进行是被,后期希望能够利用摄像头在有干扰的情况下对条形码进行识别

工程代码

#include <iostream>
#include <opencv2/opencv.hpp>
#include <zbar.h>
using namespace std;
using namespace cv;
using namespace zbar;
int main()
{
	ImageScanner scanner;
	//后期将会改用摄像头识别
	//VideoCapture cap(0);
	//if (!cap.isOpened())  //检查是否打开摄像头
	//	return -1;
	while (1)
	{
		Mat image_s, image_gray, image_gradX, image_gradY, image_grad;
		image_s = imread("多条形码.jpg", 1);//读取照片
		//cap >> image_s;//将相机中的照片保存到新的
		imshow("source", image_s);//显示图片
		cvtColor(image_s, image_gray, COLOR_BGR2GRAY);//转换为灰度图
		imshow("gray", image_gray);
		//分别计算图像在xy方向的导数
		Scharr(image_gray, image_gradX, CV_8U, 1, 0);
		Scharr(image_gray, image_gradY, CV_8U, 0, 1);
		//因为我们的条形码在X方向上,所以减掉y方向的导数
		subtract(image_gradX, image_gradY, image_grad);
		imshow("grad", image_grad);
		Mat image_threshold;
		//对图像进行二值化并进行形态学处理
		threshold(image_grad, image_threshold, 100, 255, THRESH_BINARY);//二值化
		Mat  element = getStructuringElement(1, Size(9, 9));//创建形态学的结构元素
		//膨胀两次,使条形码的二值化图像相连通
		dilate(image_threshold, image_threshold, element);
		dilate(image_threshold, image_threshold, element);
		//腐蚀两次
		erode(image_threshold, image_threshold, element);
		erode(image_threshold, image_threshold, element);
		//去除孤立的点
		morphologyEx(imageSobleOutThreshold, imageSobleOutThreshold, MORPH_CLOSE, element);
		vector<vector<Point>> contours;
		vector<Vec4i> hierarchy;
		findContours(imageSobleOutThreshold, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_NONE);//寻找轮廓
		for (int i = 0; i < contours.size(); i++)
		{
			double TempArea = fabs(contourArea(contours[i]));//计算轮廓的面积
			if (TempArea > 1000)//轮廓面积大于1000认为是条形码
			{
				Rect rect = boundingRect(contours[i]);//计算点集的矩形边界
				rectangle(image_s, rect, Scalar(255), 2);//画出矩形
				Mat image_roi = image_gray(rect);//根据轮廓画出Roi区域
				Mat image_scan;
				image_roi.copyTo(image_scan);//将Roi区域的图像复制到新的变量中
				//将OpenCV的图像转换为ZBar的图像
				int width = image_scan.cols;
				int height = image_scan.rows;
				uchar* image_zbar = (uchar*)image_scan.data;
				Image imageZbar(width, height, "Y800", image_zbar, width * height);
				scanner.scan(imageZbar); //扫描条码  
				SymbolIterator symbol = imageZbar.symbol_begin();
				if (imageZbar.symbol_begin() == imageZbar.symbol_end())
				{
					cout << "查询条码失败,请检查图片!" << endl;
				}
				for (; symbol != imageZbar.symbol_end(); ++symbol)
				{
					cout << "类型:" << endl << symbol->get_type_name() << endl << endl;
					cout << "条码:" << endl << symbol->get_data() << endl << endl;
				}
				imageZbar.set_data(NULL, 0);
			}
		}
		imshow("end", image_s);//显示框选了条形码的矩形
		cout << "--------------------" << endl;
		if (waitKey(10) == 'q');
	}
	return 0;
}

运行效果

在这里插入图片描述
在这里插入图片描述
在编写过程中遇到的最大的问题就是在利用Opencv画出Roi区域后转换为ZBar的图像类型进行识别总是会识别出同一排的其他二维码。
出现这种问题的原因是因为在划定Roi区域的时候并不会划定一块新的区域来储存图像,而是指向原来的图像,相当于将原图送到了ZBar进行识别,解决方法是利用copyTo()将划定的Roi区域储存在新的图像变量中。
详细解释:
openCV_C++笔记 : ROI感兴趣区域与Rect类
关于opencv中ROI区域的理解

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-12-11 15:43:23  更:2021-12-11 15:44:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 0:20:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码