精华内容
下载资源
问答
  • 项目要用的v4l2+qt显示摄像头可用程序(结合opencv识别二维码),用libdecodeqr实现。要求安装qt4.7和linux下编译好了opencv
  • 在用Python通过pyzbar、OpenCV识别二维码,对部分中文内容出现乱码,通过几次尝试发现,可以在内容里添加部分中文字符,来解决这个问题!代码如下: # -*- coding:utf-8 -*- # author: Ueliang time:2020/2/11 import...

    在用Python通过pyzbar、OpenCV识别二维码,对 部分中文内容 出现乱码,通过几次尝试发现,可以在内容里添加 部分中文符号 ,可以解决这个问题!
    具体的有用的中文符号大家可以代入下面尝试一下
    版本:
    Python 3.7.6
    -opencv-python 4.1.2.30
    pyzbar 0.1.8
    在这里插入图片描述在这里插入图片描述代码如下:

    # -*- coding:utf-8 -*-
    # author: Ueliang  time:2020/2/11
    import cv2 as cv
    from pyzbar import pyzbar as pyzbar
    import qrcode
    data = "木林森"
    img = qrcode.make(data=data)
    # img.show()
    img.save("img.png")
    
    # import cv2 as cv
    # from pyzbar import pyzbar as pyzbar
    #
    # import qrcode
    # qr = qrcode.QRCode(
    #     version=1, #二维码的格子矩阵大小
    #     error_correction=qrcode.constants.ERROR_CORRECT_L,
    #     box_size=10,
    #     border=4,
    # )
    # qr.add_data('啦啦啦啦德玛西亚')#向二维码添加数据
    # qr.make(fit=True)
    # img = qr.make_image()#fill_color="red", back_color="white")#更改QR的背景和绘画颜色
    # img.save('img.png')#保存图片
    
    def decodeDisplay(image):
        barcodes = pyzbar.decode(image)
        for barcode in barcodes:
            # 提取二维码的边界框的位置
            # 画出图像中条形码的边界框
            (x, y, w, h) = barcode.rect
            cv.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2)
    
            # 提取二维码数据为字节对象,所以如果我们想在输出图像上
            # 画出来,就需要先将它转换成字符串
            barcodeData = barcode.data.decode("UTF8")
            barcodeType = barcode.type
    
            # 绘出图像上条形码的数据和条形码类型
            text = "{} ({})".format(barcodeData, barcodeType)
            cv.putText(image, text, (x, y - 10), cv.FONT_HERSHEY_SIMPLEX,.5, (0, 0, 125), 2)
            # 向终端打印条形码数据和条形码类型
            print("[INFO] Found {} barcode: {}".format(barcodeType, barcodeData))
        return image
    
    def detect():
        camera = cv.imread("img.png")
        gray = cv.cvtColor(camera, cv.COLOR_BGR2GRAY)
        im = decodeDisplay(gray)
        cv.imshow("camera", im)
        cv.waitKey(0)
        cv.destroyAllWindows()
    
    if __name__ == '__main__':
        detect()
    

    参考资料:
    https://zhuanlan.zhihu.com/p/77663804
    https://www.cnblogs.com/linjiqin/p/4140455.html

    展开全文
  • OpenCV的全称是Open Source Computer Vision Library,它是一个跨平台...本文将介绍如何使用OpenCV与Java语言进行二维码识别OpenCV的安装 目前OpenCV最新的版本是4.5.2,根据所在平台不同,OpenCV有多种安装方式。

    OpenCV的全称是Open Source Computer Vision Library,它是一个跨平台的计算机视觉库,由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用。OpenCV本身由C++语言开发,但也具有各种其他语言的接口,并支持windows、linux、ios、android等各种操作系统。本文将介绍如何使用OpenCV与Java语言进行二维码识别。

    OpenCV的安装

    目前OpenCV最新的版本是4.5.2,根据所在平台不同,OpenCV有多种安装方式。可以下载编译好的包,也可以编译安装。这里我们介绍一下如何在Mac系统通过homebrew编译安装支持Java的OpenCV。其他系统的安装方式请自行在搜索相关文章。

         1. 通过brew安装ant

    brew install ant

        2. 修改opencv homebrew fomula。

    brew edit opencv

    找到 -DBUILD_opencv_java=OFF 这一行,并修改为 -DBUILD_opencv_java=ON 保存

        3. 安装openCV

    brew install opencv --build-from-source

      编译安装完成后,java Jar包和库文件会出现在 /usr/local/homebrew/Cellar/opencv/4.5.2/share/java/opencv4 目录。(M1芯片的mac会出现在/opt/homebrew/Cellar/opencv/4.5.2/share/java/opencv4下)

    开发环境配置

    在您使用的IDE中,引入上述目录下的opencv-452.jar包。并且在启动命令后加上

    -Djava.library.path=/usr/local/homebrew/Cellar/opencv/4.5.2/share/java/opencv4

    将java.library.path设置为编译出来的opencv动态链接库的地址

    识别二维码

    首先加载Opencv对应的library

    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

    OpenCV的二维码识别有两个方案,一个是使用org.opencv.objdetect.QRCodeDetector, 另一个是使用微信贡献的二维码识别算法org.opencv.wechat_qrcode.WeChatQRCode。微信的二维码识别类无论在准确度和识别成功率上都大大超过了opencv的QRCodeDetector,并且使用起来也非常简单,所以今天我们主要介绍微信包的二维码识别。

    首先我们通过Imgcodecs加载包含二维码的图像文件

    var img = Imgcodecs.imread(file.getPath())

    然后初始化WeChatQRCode对象并识别二维码

     

    其中,detect.prototxt与detect.caffemodel文件是检测的DNN的模型文件和参数文件,不传这两个文件也可以解析一些二维码,但是最后的返回值无法定位准确的二维码在图像中的坐标,只能显示整个图像的完整大小。sr.prototxt, sr.caffemodel文件是超分辨率图像增强的DNN模型文件和参数文件,可以帮助分析定位大图片中的比较小的二维码。以上四个文件都可以在这里下载:https://github.com/WeChatCV/opencv_3rdparty/

    这里最关键的代码是detector.detectAndDecode(),他接收两个参数,第一个参数是图像的Mat对象(彩色或灰度皆可),第二个参数是返回参数,会将定位到的二维码所在范围的坐标放在这个列表里面。列表的长度代表了识别到了几个二维码,每个列表对象是一个4*2*1的矩阵Mat对象,矩阵每一行代表了图片上的一个坐标,第一列是x坐标值,第二列是y坐标值。函数的返回值是一个字符串列表。列表的长度和第二个参数列表相等,里面存放了每个二维码解析后的字符串

    有了坐标数组我们就可以很方便的把二维码区域在图像中标记出来,例如:

    if (results.size() > 0) {
        System.out.println("识别到的二维码个数为: " + results.size());
        for (var resultStr : results) {
            System.out.println(“识别到的二维码内容为:" + resultStr);
        }
    ​
    ​
        for (var points : pointsOfRect ) {
            int noOfRows = points.rows();
            int noOfCols = points.cols();
            for (int row = 0; row < noOfRows; row++) {
                Imgproc.line(result, new Point(points.get(row, 0)[0], points.get(row, 1)[0]),
                        new Point(points.get((row + 1) % noOfRows, 0)[0], points.get((row + 1) % noOfRows, 1)[0]),
                        new Scalar(255, 0, 0), 3);
            }
        }
    } else {
        System.out.println("未识别到二维码.");
    };

     结果示例如下: 

    通过上面这么些代码就能让我们拥有微信类似的二维码识别能力,是不是觉得很简单呢?

     

    展开全文
  • 这里面有三个程序,贴在word里面,可以把玩一下,环境OpenCV2.4,VS2015,建好工程后,把代码贴到mian函数,运行。可以调动电脑摄像头识别二维码,并将结果保存到result.txt文件中。已解决中文乱码!
  • C++利用OpenCV识别二维码QRCode

    千次阅读 2019-07-15 10:07:44
    我查阅了一大堆资料,识别二维码的方法有很多,基本上分为用zbar和zxing两种,但是对效果来看,zxing的识别更胜一筹,而且zbar已经停止更新了。那么,作为9012年的萌薪,当然是选择效果强大的zxing了啊。 方法一:...

    引子

    项目需要用到C++进行二维码识别,虽然手机上随便扫码就可以轻易识别出来,但是到了电脑上可就没有那么方便了。
    我要做的是能够一下子把一张图片上的几十个二维码一下子识别出来,如果成功的话,那岂不是比用手机一张张扫码快许多啊。当然现在已经成功了,现在把配置过程记录一下。
    我查阅了一大堆资料,识别二维码的方法有很多,基本上分为用zbar和zxing两种,但是对效果来看,zxing的识别更胜一筹,而且zbar已经停止更新了。那么,作为9012年的萌薪,当然是选择效果强大的zxing了啊。

    方法一:zxing

    1. 原理
      简单来讲,它先找二维码的三个角点,如果找到才会进行解码。
    2. 首先
      我们需要一份包装包:zxing的安装库,这是C++版本的,将它下载到你的电脑上
    3. 编译安装
      下载好的zxing库建立一个build的文件夹,编译,安装,命令行如下。
    mkdir build
    cd build
    cmake ..
    make
    make install
    

    这样就ok了。需要注意的是,CMakeLists.txt里面有OpenCV的依赖选项,所以最好提前配置好OpenCV。
    4. 安装完成
    如果你成功编译了,那么在build文件夹里面会有一个叫做libzxing.a文件,这就是你编译好的静态链接库,后面你想调用zxing的话就得把这个文件导进去。
    5. 识别二维码
    这里我编写了一个简单的函数,思想是,先用OpenCV imread函数读取图片,然后将其装换为灰度图,然后调用zxing的解码函数得到识别结果进行输出。
    首先准备好CmakeLists.txt这个很基本,但很重要。

    cmake_minimum_required (VERSION 3.1)
    # Enable C++11
    set(CMAKE_CXX_STANDARD 11)
    set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
    # 调试模式
    set(CMAKE_BUILD_TYPE "Debug")
    project (newPipeLocation)
    #这是我自己的OpenCV安装路径
    set(OpenCV_DIR /usr/local)
    # zxing
    set(ZXing_DIR /usr/local)
    find_package(OpenCV 4 REQUIRED)
    
    include_directories(
        ${OpenCV_DIR}/include
        ${ZXing_DIR}/include/zxing
        /home/wwh/Downloads/zxing-cpp/core/src
        /home/wwh/Downloads/zxing-cpp/opencv/src
        )
    add_executable(main main.cpp)
    # 这里的libzxing.a很重要
    target_link_libraries(main 
        ${OpenCV_LIBS}
        /home/w/Downloads/zxing-cpp/build/libzxing.a
        )
    

    主函数如下:(这个代码的好处是如果检测不到二维码,也可以输出一条显示信息,而不会使得程序崩溃)

    #include <opencv2/opencv.hpp>
    #include <exception>
    #include <iostream>
    #include <fstream>
    #include <zxing/LuminanceSource.h>
    #include <zxing/common/Counted.h>
    #include <zxing/Reader.h>
    #include <zxing/ReaderException.h>
    #include <zxing/Exception.h>
    #include <zxing/aztec/AztecReader.h>
    #include <zxing/common/GlobalHistogramBinarizer.h>
    #include <zxing/common/IllegalArgumentException.h>
    #include <zxing/DecodeHints.h>
    #include <zxing/BinaryBitmap.h>
    #include <zxing/DecodeHints.h>
    #include <zxing/datamatrix/DataMatrixReader.h>
    #include <zxing/MultiFormatReader.h>
    #include <zxing/pdf417/PDF417Reader.h>
    #include <zxing/qrcode/QRCodeReader.h>
    #include <zxing/MatSource.h>
    
    using namespace std;
    using namespace cv;
    using namespace zxing;
    using namespace zxing::qrcode;
    
    void displayPicture(const string& winName, cv::Mat inputImage, int waitTime)
    {
    	// 暂时展示图片
    	cv::namedWindow(winName, WINDOW_NORMAL);
    	cv::resizeWindow(winName, 800, 800);
    	cv::imshow(winName, inputImage);
    	cv::waitKey(waitTime);
    	cv::destroyAllWindows();
    }
    
    void help()
    {
        cout<< "Usage:"<<endl;
        cout<< "cvtColor(image, imageHsv, COLOR_BGR2HSV);" <<endl;
        cout<< "cv::inRange(imageHsv, Scalar(35, 43, 46), Scalar(77, 255, 255), dstHsv);" <<endl;
        cout << "HSV色域设置参考:" << endl;
        cout << "Blue: min: Scalar(100, 43, 46); max: Scalar(124, 255, 255)" << endl;
        cout << "Green: min: Scalar(35, 43, 46); max: Scalar(77, 255, 255)" << endl;
        cout << "White: min: Scalar(0, 0, 221); max: Scalar(180, 30, 255)" << endl;
    }
    
    int main()
    {
        string inputPathDir = "/home/wwh/Documents/myproject/newPipeLocation/test_images/";
        string imagePath = inputPathDir + "qr02.png";
        const string myWinName = "Show Image";
        cv::Mat image = cv::imread(imagePath);
        // cv::resize(image, image, Size(115, 100));
        // displayPicture("raw image", image, 1000);
        cv::Mat matGray;
        cv::cvtColor(image, matGray, COLOR_BGR2GRAY);
    
        // 进行尝试
        try
        {
            zxing::Ref<zxing::LuminanceSource> source = MatSource::create(matGray);
            // int width = source->getWidth();
    	    // int height = source->getHeight();
            // fprintf(stderr, "image width: %d, height: %d\n", width, height);
            zxing::Ref<zxing::Reader> reader;
            reader.reset(new zxing::qrcode::QRCodeReader);
            zxing::Ref<zxing::Binarizer> binarizer(new zxing::GlobalHistogramBinarizer(source));
            zxing::Ref<zxing::BinaryBitmap> bitmap(new zxing::BinaryBitmap(binarizer));
            zxing::Ref<zxing::Result> result(reader -> decode(bitmap, zxing::DecodeHints(zxing::DecodeHints::QR_CODE_HINT)));
            std::string str = result -> getText() -> getText();
            fprintf(stderr, "recognization result: %s\n", str.c_str());
        }
        catch(const ReaderException& e)
        {
            cerr << e.what() << ", no QRCode, ignored" << endl;
        }
        displayPicture("en", matGray, 1000);
        return 0;
    }
    

    方法二:使用OpenCV自带的功能

    我发现OpenCV4中已经集成了二维码解码的程序了,后面有时间再进行补充。

    参考文献(大多数好像都没啥用就不放了)

    展开全文
  • 基于Opencv二维码识别源码!效果比较可以!
  • opencv检测二维码

    2020-12-05 20:13:17
    静态识别二维码 动态识别二维码 识别受污染的二维码 生成二维码 首先,我们要安装两个个模块,qrcode,image, pip install qrcode pip install image 生成二维码 import qrcode img = qrcode.make('simpleqrcode'...

    opencv检测二维码

    生成二维码

    静态识别二维码

    动态识别二维码

    识别受污染的二维码

    生成二维码

    首先,我们要安装两个个模块,qrcode,image,

    pip install  qrcode
    pip install  image
    
    

    生成二维码

    import qrcode
    img = qrcode.make('simpleqrcode')
    img.save('D:/simpleqrcode.jpg')
    #img.show()
    
    

    静态识别二维码

    识别电脑中的二维码

    import cv2
    import numpy as np
    import qrcode
    img = cv2.imread('simpleqrcode.jpg')
    qrcode = cv2.QRCodeDetector()
    result,points,code = qrcode.detectAndDecode(img)
    print(result)
    

    返回值有三个,第一个result就是解码后的内容,例如我这个二维码的结果是"1234567890".第二个points是二维码轮廓的四个角,从左上角顺时针转的.第三个code是二维码的原始排列,也就是每个点是0还是255的一个矩阵.白色是255,黑色是0.

    调用电脑摄像头识别二维码

    import cv2
    import pyzbar.pyzbar as pyzbar
     
    def decodeDisplay(video):
        # 转为灰度图像
        gray = cv2.cvtColor(video, cv2.COLOR_BGR2GRAY)
        barcodes = pyzbar.decode(gray)
        for barcode in barcodes:
            # 提取二维码的位置,然后用边框标识出来在视频中
            (x, y, w, h) = barcode.rect
            cv2.rectangle(video, (x, y), (x + w, y + h), (0, 255, 0), 2)
            # 字符串转换
            barcodeData = barcode.data.decode("utf-8")
            barcodeType = barcode.type
            # 在图像上面显示识别出来的内容
            text = "{}".format(barcodeData)
            cv2.putText(video, text, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX,1, (0, 255, 0), 2)
            # 打印识别后的内容
            print("[扫描结果] 二维码类别: {0} 内容: {1}".format(barcodeType, barcodeData))
        cv2.imshow("cam", video)
     
    def detect():
        cv2.namedWindow("cam",cv2.WINDOW_NORMAL)
        cam = cv2.VideoCapture(0)
        while True:
            # 读取当前帧
            ret, frame = cam.read()
            decodeDisplay(frame)
            # 按ESC键退出
            if(cv2.waitKey(5)==27):
                break
        cam.release()
        cv2.destroyAllWindows()
     
    if __name__ == '__main__':
        detect()
    

    从本地摄像头截取图片

    import cv2
    import os
    # 获取本地摄像头
    # folder_path 截取图片的存储目录
    def get_img_from_camera_local(folder_path):
        cap = cv2.VideoCapture(1)
        i = 1
        while True:
            ret, frame = cap.read()
            cv2.imshow("capture", frame)
            print(str(i))
            cv2.imwrite(folder_path + str(i) + '.jpg', frame)  # 存储为图像
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
            i += 1
        cap.release()
        cv2.destroyAllWindows()
    # 测试
    if __name__ == '__main__':
    
        folder_path = 'D:\\python\\'
        if not os.path.exists(folder_path):
            os.makedirs(folder_path)
        get_img_from_camera_local(folder_path)
        
    
    展开全文
  • opencv4 二维码识别

    2020-04-01 15:09:36
    opencv正式将二维码识别加入进来。 #include <iostream> #include<opencv2\opencv.hpp> using namespace cv; int main() { cv::Mat src= imread("1.jpg"); cv::QRCodeDetector QRdetecter; std::...
  • opencv 识别彩色二维码

    2018-07-15 08:33:32
    使用opencv识别彩色二维码。具体流程可参见blog。50个字
  • opencv二维码 识别

    2021-04-13 21:11:56
    opencv微信二维码识别
  • Opencv:二维码检测与识别Python实现

    千次阅读 2019-12-24 12:10:22
    Opencv:二维码检测与识别Python实现 一、内容 二维码检测与识别 OpenCV在对象检测模块中QRCodeDetector有两个相关API分别实现二维码检测与二维码解析 检测 QRCodeDetector::detect( InputArray img, OutputArray ...
  • 前面,我们已经介绍了两种集成 wechat_qrcode 微信二维码识别能力的做法: 完整编译 OpenCVOpenCV Contrib Native C++ 单独集成 wechat_qrcode 模块 这两种方式的预览和识别均是基于 OpenCV 提供的 JavaCamera...
  • opencv实现二维码检测

    千次阅读 2020-07-03 20:07:03
    opencv从4代之后推出了二维码识别接口.调用方法是这样的. ‘’’ import cv2 img = cv2.imread(‘data/qrcode.jpg’) img = cv2.imread(‘qrcode/11.jpg’) qrcode = cv2.QRCodeDetector() result, points, c.
  • 基于OpenCV二维码检测识别基础demo

    千次下载 热门讨论 2013-01-30 12:32:29
    基于OpenCV2.4.3+VS2008的marker检测识别demo,具体看http://blog.csdn.net/yang_xian521/article/details/8525881
  • OpenCV在对象检测模块中QRCodeDetector有两个相关API分别实现二维码检测与二维码解析: # 检测二维码 bool cv::QRCodeDetector::detect( InputArray img, OutputArray points )const img输入图像,灰度或者彩色...
  • 获取qt中识别二维码插件的git地址: https://github.com/ftylitak/qzxing 将整个qzxing文件夹放到项目目录中 再pro文件中添加:include(qzxing/src/QZXing.pri) h文件 #ifndef WIDGET_H #define WIDGET_H #...
  • 基于OpenCV实现二维码发现与定位

    万次阅读 多人点赞 2017-08-18 00:34:02
    基于OpenCV实现二维码发现与定位在如今流行扫描的年代,应用程序实现二维码扫描检测与识别已经是应用程序的标配、特别是在移动端、如果你的应用程序不能自动发现检测二维码,自动定位二维码你都不好意思跟别人打招呼...
  • Python + OpenCV4 识别二维码opencv4中集成了识别二维码的库,所以只需要简单的库函数调用就可以就可以实现识别二维码了 废话不多说直接上代码 import cv2 as cv import numpy as np img = cv.imread("D:\\...
  • 通过OpenCV识别QR二维码

    万次阅读 2018-12-26 19:03:32
    博客分为两部分,第一部分是QR码的基础知识,第二部分是通过OpenCV识别QR码 一 、QR码的基础知识 什么是QR码? QR码能保存的数据量有多少? 如何扫描QR码?让我们了解一下QR码的基础知识。了解创建、读取二维码的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 444
精华内容 177
关键字:

opencv识别二维码