环境以及前言

环境 jetson nano Linux ubuntu 18.4
QT版本 QT5.98
摄像头 Csi摄像头
Opencv Jetson nano 自带的-。- 应该是4.1?不太清楚

电脑不在身边 不截图了 打字处理吧-。-
其实我也很想贴图处理的 我希望如果我的文章可以给予你帮助 你可以自己尝试多打打 额…可能我说这个话也不太好 因为可能看这篇文章的你是我的前辈 但是还是比较建议自己打不要直接copy啦-。-

零 打开CSI摄像头

因为之前常规使用Opencv的open(0)打开摄像头 事实是 打不开 哥们也不知道是什么原因 后面是使用open管道处理打开的

std::string GetStr(int index)
{const int captureWidth = 800;const int captureHeight = 600;const int displayWidth = 800;const int displayHeight = 600;const int framerRate = 120;const int flipMethod = 0;const int CamearIndex = inedx;return "nvarguscamerasrc sensor-id=" + std::to_string(CamearIndex) + " ! video/x-raw(memory:NVMM), width=(int)" + std::to_string(capture_width) + ", height=(int)" +std::to_string(capture_height) + ", format=(string)NV12, framerate=(fraction)" + std::to_string(framerate) +"/1 ! nvvidconv flip-method=" + std::to_string(flip_method) + " ! video/x-raw, width=(int)" + std::to_string(display_width) + ", height=(int)" +std::to_string(display_height) + ", format=(string)BGRx ! videoconvert ! video/x-raw, format=(string)BGR ! appsink";
}

然后再再使用opencv 调用 OpenCV的open函数 通过管道的方式

//因为我是在线程里面跑的 所以我在打开的时候需要上锁 看你们自己的需求 QT的锁包含头文件 #include <QMutex> QMutex _mux
bool Open()
{const std::string camearStr = GetStr(0);
_mux.lock();
bool isOpen = _cap.open(camearStr,cv::CAP_GSTREAMER);
_mux.unlock();
if(!isOpen)
{return false;
}
return true;
}

这样就可以通过管道的方式去打开 CSI摄像头
0是摄像头的编号 以为我这边是双目摄像头 如果你的摄像头规格跟我不太一样的话 你可以直接拿着 GetStr的那一段输出出来 然后丢去百度 然后看看有没有合适你的

一 OpenCV自带的库识别

void Code_Identify(cv::Mat mat)
{//mat 是传进来的原图cv::Mat img = mat.clone();cv::Mat qrcodeBin;cv::QRCodeDetector qrcodeDetector;std::vector<cv::Point> points;std::string information;//这一步是设别二维码的 当然如果你觉得太麻烦的话可以直接使用 detectAndDecode 这个是识别并解码bool isQRcode = qrcodeDetector.detect(img,points){information = qrcodedetector.decode(gray, points, qrcode_bin);//对于QT来说 可以发射信号 或者对着这段information解码然后再做其他}else{qDebug() << "你想提示什么就提示什么吧 不要也是没关系的";}//二维码的点位输出for(int i = 0; i < points.size(); i++){//图 起点 终点 颜色 宽度 类型if(i == points.size() - 1){cv::line(img,points[i],points[0],cv::Scalar(0,0,0),2,8);}cv::line(img,points[i],points[i + 1],cv::Scalar(0,0,0),2,8);}//后续的内容你们喜欢cv::imwrite()也可以 喜欢imshow() 都行 二维码的识别 解码 定位都出来了//附上一点 如果你需要求出二维码的旋转角度也是可以的//因为我们的要求是要判断二维码的角度 然后转动硬件去保持平衡//求出最小内接圆 内接还是外接我忘了cv::RotatedRect  rotateRect = cv::minAreaRect(cv::Mat(points));qDebug() << rotateRect.angle;//自己可以点进去RotateRect这个类 里面有中心位置 角度还有顶点
}

二 zbar的识别

个人在使用zbar比使用 opencv自带的二维码识别 快一倍左右 我个人更倾向于zbar 也比较简单
因为环境是出于jetson nano 直接使用linux命令行输入

sudo apt-get install libzbar-dev libzbar0

然后你自己去找找 libzbar.a 这个库 还有 zbar.h这个头文件
然后再pro里面包含进来

然后就可以开写了-。-
话说你吃饭了吗-。-没吃饭要记得按时吃饭哦

void Code_Identify(cv::Mat mat);
{//头两句我认为你写在构造函数里面也可以zbar::ImageScanner scanner;//这个zbar::ZBAR_NONE 他是表示 所有的都识别 如果你只需要识别二维码的话 你可以用Zbar::QR 后面忘了 反正编译器会给提示的scanner.set_config(zbar::ZBAR_NONE,zbar::ZBAR_CFG_ENABLE,1);cv::Mat garyMat;//这边经过测试发现 这玩意转灰度图更快一些cv::cvtColor(mat,garyMat,cv::COLOR_BGR2GARY);//转成zbar的图片格式cv::zbar::Image image(mat.cols,mat.rows,"Y800",(uchar*)garyMat.data,mat.cols * mat.rows);for(zbar::Image::SymbolIterator it = image.symbol_begin; it != image.symbol.end; it++){//你需要什么在这里看看编译器给的提示就好了//这是识别的内容it->get_data();//识别的类型it->get_type();//识别的顶点std::vector<cv::Point> pointList;for(int i = 0; i < it->get_location_size(); i++){const int x = it->get_location_x(i);const int y = it->get_location_y(i);cv::Point point = cv::Point(x,y);pointList.pushback(point);}//同理你需要什么就去拿什么吧-。-//旋转角跟上面的求法是一样的//如果你发现你的旋转角求的矩形很怪 请把你的图像分辨率设置成跟摄像头一样的分辨率}
}

三 线程循环判断二维码

在零里面就已经说了用了线程 所以这头还是用线程

#if 0
void run()
{//这个是继承了QThread做的//手打的话就不打这个类名了吧while(1){_mux.lock();if(_isClose){_mux.unlock();break;}if(!_cap.isOpened()){_mux.unlock();continus;}cv::Mat mat;if(!cap.read(mat)){_mux.unlock();continus;}//这个就是上面的二维码识别Code_Identify(mat);img.release();_mux.unlock();}
}
#endif

做一个分割线 为啥 因为他这个的效率是跟随Code_Identify(mat)解码的速度匹配的
我这边测试花了100-300ms zbar好一点 100ms差不多 真的痛苦
哥们这边也么有什么好办法可以处理这个慢 自己单独重新拉了一个线程 然后通过push的方式去处理 发现如果不加锁的情况下速度很快 但是二维码处理不过来 加了锁吧就特别慢 现在这会卡在这里了
目前的解决方式是把图片变小放进去检测 就是200*200 速度是快了 但是好像不是很好 不知道 目前是用这个方法的

总结

没啥好总结的 各位好哥哥好姐姐有更好的方法底下说一下 真的十分感谢

Jetson nano 摄像头二维码识别 Opencv zbar QT相关推荐

  1. qt在window实现调取本机摄像头或者外设摄像头二维码识别升级版

    之前发过一个帖子,后来发现有很多bug,不得已又研究了几天, 升级了这一版本,比之前好多了,bug也完美解决,但只是在我应用上解决,相对于大多数人来说还是未知的,看你们个人需求,希望能帮助到你们.话不 ...

  2. 更强大的二维码识别工具zBar

    <OpenCV系列教程> 项目位置:OpenCV-Sample 代码位置:102-ScannerQRCodeWithZbar.py OpenCV自带的二维码识别工具,能力较差,尤其是在如下 ...

  3. 基于ZBar,OpenCV和Python的二维码识别

    0 前言 今天分享一个之前做过的二维码识别,参考:https://www.pyimagesearch.com/2018/05/21/an-opencv-barcode-and-qr-code-scan ...

  4. Python基于pyzbar、opencv、pyqt5库,实现二维码识别 gui 应用程序开发

    二维码组成结构基本介绍 二维码识别背景介绍 视觉的方法可以用来估计位置和姿态.最容易想到的是在目标上布置多个容易识别的特征,这样使用opencv相机标定和.相机畸变矫正.轮廓提取.solvepnp来获 ...

  5. opencv调用微信的二维码识别引擎

    导读 用过二维码识别的小伙伴们都知道,微信的二维码识别确实要比开源的二维码识别zxing和zbar要强不少,zxing和zbar对小的二维码以及模糊的二维码基本上是识别不出来的,有时候一张包含二维码的 ...

  6. 数字图像处理二维码识别 python+opencv实现二维码实时识别

    数字图像处理二维码识别 python+opencv实现二维码实时识别 特点: (1)可以实现普通二维码,条形码: (2)解决了opencv输出中文乱码的问题 (3)增加网页自动跳转功能 (4)实现二维 ...

  7. 【OpenCV】二维码识别

    文章目录 前言 一.OpenCV自带二维码识别功能 二.使用pyzbar识别 三.串口发送数据 四.播放音乐 总结 前言 最终实现视频动态识别二维码. 一.OpenCV自带二维码识别功能 import ...

  8. 使用 OpenCV + 微信二维码引擎实现二维码识别

    Part1背景 今年自疫情以来,我都没有写过文章.一方面是疫情导致居家办公比较烦躁,另一方面最近有点懒了.但是工作还是要继续,趁这几天优化了一下最近的项目,我整理了一下如何使用 OpenCV 和微信二 ...

  9. OpenCV(项目)二维码识别(二维码、条形码)

    目录 过程 1.获取图片中的二维码信息 2.获取视频中的二维码信息 3.检测出二维码框 4.显示数据 5.添加数据,判断二维码是否授权 5-1:.添加数据 5-2.读取文件信息,放入数组 5-3.判断 ...

最新文章

  1. CoLoRMap: Correcting Long Reads by Mapping short reads CoLoRMap:通过映射短读来纠正长读
  2. Linux的mount命令简介
  3. wenbao与windows命令
  4. 基于深度学习的人脸检测与静默活体检测——C++实现
  5. 第六届蓝桥杯决赛JavaC组真题——详细答案对照(完整版)
  6. c语言火车票管理系统源代码2000行,C语言教务管理系统[2000行代码].doc
  7. 消息队列重要机制讲解以及MQ设计思路(kafka、rabbitmq、rocketmq)
  8. 抽奖系统的流量削峰方案
  9. 在Saas发展的黄金时代里带你理解SaaS设计
  10. spring的IOC原理,容器管理的bean类型、bean的生命周期
  11. [SQL]实战之查找员工编号emp_no为10001其自入职以来的薪水salary涨幅值growth
  12. SQL Server 2012入门T-SQL基础篇:(10)UPDATE语句
  13. 如何快速激活数据恢复软件
  14. 系统集成项目管理工程师必考公式
  15. java reader类 实例_Java文件类操作实例总结
  16. 静止轨道卫星几何校正——FY-4A几何校正(风云系列静止卫星可以参考)
  17. YOLOv5、v7改进之三十九:引入改进遮挡检测的Tri-Layer插件 | BMVC 2022
  18. 微信小程序下载图片预览和真机调试均无问题,发布到远程后点击下载没有任何反应
  19. 使用selenium自动化操作浏览器
  20. ImageTools-图片格式转换工具类

热门文章

  1. 512_盟德插件googleplayservice
  2. Java的activiti的demo_activitiDemo
  3. Crack the fySystem.dll
  4. python恺撒密码 B
  5. 2D转换模块-相片墙
  6. WinForm MessageBox提示框方法
  7. python 机器视觉测量_python OpenCV 宽度测量
  8. 网络安全工具——CS多人合作平台
  9. 在Livemedia的基础上开发自己的流媒体客户端 V 0.01
  10. 注意力机制详解系列(一):注意力机制概述