opencv_04条形码区域分割

news/2024/11/14 21:33:13/

基于OpenCV的条形码区域分割
要基于OpenCV实现条形码区域分割,可以按照以下步骤进行:

  • 加载图像:使用OpenCV中的imread函数读取待处理图像。
  • 灰度化:使用OpenCV中的cvtColor函数将彩色图像转换为灰度图像。
  • 边缘检测:使用OpenCV中的Canny函数对灰度图像进行边缘检测,得到二值图像。
  • 轮廓检测:使用OpenCV中的findContours函数对二值图像进行轮廓检测,得到所有轮廓的列表。
  • 轮廓筛选:遍历所有轮廓,使用OpenCV中的boundingRect函数计算每个轮廓的包围矩形,并根据矩形的宽高比和面积进行筛选,得到符合条件的条形码区域。
  • 绘制矩形:使用OpenCV中的rectangle函数在原图上绘制符合条件的条形码区域。
  • 显示图像:使用OpenCV中的imshow函数显示处理后的图像。

但是由于选取的图片比较复杂,这样的常规流程是识别不出效果的,所以在原有的流程上又添加了新的处理:

  • 黑帽算法:使用黑帽算法可以将杂色有效去除。黑帽是一种常用的图像处理算法,可以用于图像增强、边缘检测、形态学变换等应用。
  • 二值化:通过黑帽算法设定合适的阈值来将图像有用部分提取出来。
  • 膨胀+闭运算:将图像连接起来
  • 开运算:将不符合的区间去除

效果:
在这里插入图片描述
代码:


#include <QFileDialog>
#include <opencv2/opencv.hpp>
#include <opencv2/saliency/saliencySpecializedClasses.hpp>
#include <opencv2/opencv.hpp>
#include <QApplication>
#include <QFileDialog>
#include <QLabel>
void MainWindow::on_openButton_clicked() {QString filename = QFileDialog::getOpenFileName(this, tr("Open Image"), ".", tr("Image Files (*.png *.jpg *.bmp)"));if (filename.isEmpty()) {return;}Mat image = imread(filename.toStdString());if (image.empty()) {return;}// 灰度化Mat grayImage;cvtColor(image, grayImage, COLOR_BGR2GRAY);// 黑帽 黑帽是一种常用的图像处理算法,可以用于图像增强、边缘检测、形态学变换等应用。Mat black_img = blackhat(grayImage, 5);// 二值化Mat binaryImg;threshold(black_img, binaryImg, 80, 255, cv::THRESH_BINARY);// 膨胀+闭运算Mat kernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(10, 5));Mat dilated;dilate(binaryImg, dilated, kernel);Mat closed;morphologyEx(dilated, closed, cv::MORPH_CLOSE, kernel);// 开运算Mat outputImage;Mat kernel1 = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(20, 20));morphologyEx(closed, outputImage, cv::MORPH_OPEN, kernel1);imshow("binary image", outputImage);// 边缘检测Mat edges;Canny(outputImage, edges, 50, 150);    // 轮廓检测std::vector<std::vector<cv::Point>> contours;findContours(edges, contours, RETR_LIST, CHAIN_APPROX_SIMPLE);    // 轮廓筛选std::vector<cv::Rect> barcodeRects;for (int i = 0; i < contours.size(); i++)    {        // 计算包围矩形Rect rect = boundingRect(contours[i]);        // 根据宽高比和面积筛选double aspectRatio = static_cast<double>(rect.width) / rect.height;if (aspectRatio > 2 && aspectRatio < 4 && rect.area() > 1000) {barcodeRects.push_back(rect);}}// 绘制矩形for (int i = 0; i < barcodeRects.size(); i++)    {rectangle(image, barcodeRects[i], Scalar(255, 255, 0), 2);}cvtColor(image, image, COLOR_BGR2RGB);//BGR convert to RGBQImage qimage(image.data, image.cols, image.rows, image.step, QImage::Format_RGB888);ui->label->setPixmap(QPixmap::fromImage(qimage));ui->label->resize(qimage.size());ui->label->show();
}

http://www.ppmy.cn/news/78357.html

相关文章

Thinkphp漏洞详解合集

文章目录 Thinkphp6.0.12LTS反序列化漏洞环境漏洞分析 thinkphp lang命令执行环境影响版本漏洞分析漏洞复现 CNVD-2018-24942(t5RCE)环境影响版本漏洞分析漏洞复现 Thinkphp3.2.x命令执行环境漏洞分析漏洞复现 thinkphp-2x-rce漏洞环境影响版本漏洞分析 Thinkphp5.0.23变量覆盖…

【机器学习】线性回归模型详解

PS&#xff1a;本文有一定阅读门槛&#xff0c;如果有不明白的地方欢迎评论询问&#xff01; 1 模型概述 接下来我们将要学习我们的第一个模型——线性回归。比如说我需要根据数据预测某个面积的房子可以卖多少钱 接下来我们会用到以下符号&#xff1a; m:训练样本数量x:输…

Flutter控件之Tab选项卡封装

Tab选项卡&#xff0c;这是一个非常常见且权重很高的一个组件&#xff0c;随便打开一个App&#xff0c;比如CSDN&#xff0c;如下图&#xff0c;首页顶部就是一个Tab选项卡&#xff0c;这个功能可以说&#xff0c;几乎每个App都会存在。 在Android中&#xff0c;我们可以使用Ta…

EduSoho 网校系统部署

目录 一、初始化环境二、安装 Nginx三、安装 MySQL四、安装 PHP五、上线 EduSoho六、验证FAQ 一、初始化环境 1、安装wget 如果系统已安装wget,请跳过此步骤 yum install wget2、关闭防火墙/Selinux systemctl stop firewalld.service systemctl disable firewalld.service…

华为ACL(基本的高级的基于时间的自反的都有)

第12章:ACL 随着网络的飞速发展,网络安全和网络服务质量QoS (Quality of Service)问题日益突出。访问控制列表 (ACL, Access Control List)是与其紧密相关的一个技术。ACL可以通过对网络中报文流的精确识别,与其他技术结合,达到控制网络访问行为、防止网络攻击和提高网络带…

助力工业物联网,工业大数据之ODS层构建:申明分区代码及测试【十】

文章目录 知识点13&#xff1a;ODS层构建&#xff1a;申明分区代码及测试知识点14&#xff1a;ODS层与DWD层区别知识点15&#xff1a;DWD层构建&#xff1a;需求分析知识点16&#xff1a;DWD层构建&#xff1a;建库实现测试知识点17&#xff1a;DWD层构建&#xff1a;建表实现测…

【2023】某python语言程序设计跟学第八周内容

目录 1.实例&#xff1a;体育竞技分析1.1.问题分析1.2.自顶向下和自底向上1.3.体育竞技分析 2.python程序设计思维2.1.计算思维与程序设计2.2.计算生态与python语言2.3.用户体验与软件产品2.4.基本的程序设计模式 3.Python第三方库安装3.1.看见更大的Python世界3.2.pip安装方式…

数字音频接口I2S-PDM-TDM-PCM

主要分类&#xff1a;模拟、数字&#xff08;I2S、PCM、PDM、TDM&#xff09; 模拟音频&#xff0c;就是功放输出的&#xff0c;驱动音箱和喇叭的音频。模拟麦克风采样回来的数据也是模拟音频。通常会有单端或差分两种信号。 数字音频&#xff0c;不能直接驱动喇叭&#xff0…