opencv_04条形码区域分割

这篇具有很好参考价值的文章主要介绍了opencv_04条形码区域分割。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

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

效果:
opencv_04条形码区域分割
代码:文章来源地址https://www.toymoban.com/news/detail-458185.html


#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 RGB
    QImage 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();
}

到了这里,关于opencv_04条形码区域分割的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android OpenCV(七十五): 看看刚”转正“的条形码识别

    2021年,我们写过一篇《OpenCV 条码识别 Android 平台实践》,当时的条形码识别模块位于 opencv_contrib 仓库,但是 OpenCV 4.8.0 版本开始, 条形码识别模块已移动到 OpenCV 主仓库,至此我们无需自行编译即可轻松地调用条形码识别能力。 Bar code detector and decoder moved from Contrib to main re

    2024年02月12日
    浏览(38)
  • Python - OpenCV识别条形码、二维码(已封装,拿来即用)

    此代码可识别条形码和二维码,已封装好,拿来即用: 结果:

    2024年02月12日
    浏览(42)
  • H5实现扫码读取二维码条形码功能(二维码+条形码)

    本文主要介绍二维码实现的原理 1、使用插件 npm install @zxing/library 2、主要用到 BrowserMultiFormatReader 这个构造函数,用于打开摄像头 视图 核心代码(以vue3写法举例) 二维码的样式 ``

    2024年02月11日
    浏览(50)
  • Java生成条形码

    生成条形码工具类:   生成结果如下:  

    2024年02月15日
    浏览(46)
  • uniapp生成条形码?

    首先先在插件市场找到条形码 链接:https://ext.dcloud.net.cn/search?q= 下载到项目里面 三、在pages.json中写入以下: 四、在html页面 这样就已经差不多了 条形码可以出来了

    2024年02月04日
    浏览(44)
  • java代码实现生成条形码

    2024年02月20日
    浏览(40)
  • 【Java】批量生成条形码-itextpdf

    批量生成条形码 Controller Service

    2024年02月12日
    浏览(35)
  • 【MAUI】条形码,二维码扫描功能

    本系列文章面向移动开发小白,从零开始进行平台相关功能开发,演示如何参考平台的官方文档使用MAUI技术来开发相应功能。 移动端的扫描条形码、二维码的功能已经随处可见,已经很难找到一个不支持扫描的App了,但是微软的MAUI竟然没有提供,那么我们应该如何实现呢?

    2024年02月04日
    浏览(41)
  • JS 生成条形码(一维码)jsBarcode

    script 引入 地址:https://cdn.jsdelivr.net/npm/jsbarcode@3.11.5/dist/JsBarcode.all.min.js 也可以进官网查看地址。 npm方式 安装: 页面引入: HTML部分加入svg容器 JS 代码部分 三、结果 参数设置(options) option 默认值 类型 说明 format “auto” (CODE128) String 条形码的类型 width 2 Number 每个条条的宽

    2024年01月20日
    浏览(37)
  • 如何使用 Python 生成和读取条形码

    条形码在我们的日常生活中很常见。只需几个简单的步骤,您就可以使用 Python 轻松生成和扫描条形码。 当您从商店购买商品时,您所购买的物品上的平行黑条纹,具有不同宽度,被称为条形码。条形码是一种将数据以视觉、机器可读的方式表示的方法。条形码被用于存储有

    2024年02月04日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包