开发环境;ubuntu 18.04

IDE:clion 2019

源文件.cpp

#include <opencv2/opencv.hpp>
#include <zbar.h> using namespace cv;
using namespace std;
using namespace zbar; typedef struct
{
string type;
string data;
vector <Point> location;
} decodedObject; // 查找和解码条形码和二维码
void decode(Mat &im, vector<decodedObject>&decodedObjects)
{ // 创建ZBAR扫描器
ImageScanner scanner; // 配置扫描器
scanner.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1); // 将图像转换为灰度
Mat imGray;
cvtColor(im, imGray, COLOR_BGR2GRAY);
imshow("gray",imGray);
// 在ZBAR图像中包装图像数据
Image image(im.cols, im.rows, "Y800", (uchar *)imGray.data, im.cols * im.rows); // 扫描图像中的条形码和二维码
int n = scanner.scan(image); // 打印输出结果
for (Image::SymbolIterator symbol = image.symbol_begin(); symbol != image.symbol_end(); ++symbol)
{
decodedObject obj; obj.type = symbol->get_type_name();
obj.data = symbol->get_data(); // Print type and data
cout << "Type : " << obj.type << endl;
cout << "Data : " << obj.data << endl << endl; // Obtain location
for (int i = 0; i < symbol->get_location_size(); i++)
{
obj.location.push_back(Point(symbol->get_location_x(i), symbol->get_location_y(i)));
} decodedObjects.push_back(obj);
}
} // 显示条形码和二维码位置
void display(Mat &im, vector<decodedObject>&decodedObjects)
{
// 循环所有解码对象
for (int i = 0; i < decodedObjects.size(); i++)
{
vector<Point> points = decodedObjects[i].location;
vector<Point> hull; // 如果这些点不形成四边形,则找到凸包。
if (points.size() > 4)
convexHull(points, hull);
else
hull = points; // 凸包中的点数
int n = hull.size(); for (int j = 0; j < n; j++)
{
line(im, hull[j], hull[(j + 1) % n], Scalar(255, 0, 0), 3);
} } // 显示结果
imshow("Results", im);
waitKey(0); } int main(int argc, char* argv[])
{ // Read image
Mat im = imread("/home/leoxae/图片/qrcode2.png"); // Variable for decoded objects
vector<decodedObject> decodedObjects; // Find and decode barcodes and QR codes
decode(im, decodedObjects); // Display location
display(im, decodedObjects);
waitKey(0);
return 0;
}

cmakelist配置

cmake_minimum_required(VERSION 3.14)
project(QRcode) set(CMAKE_CXX_STANDARD 14) add_executable(QRcode main.cpp) #找到opencv的包
set(TARGET_LIBS "/usr/local/include/opencv4/opencv2/")
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} ) #zbar
set(zbar_include_dir "/usr/local/include")
set(zbar_link_dir "/usr/local/lib") include_directories(${zbar_include_dir})
link_directories(${zbar_link_dir})
link_libraries(zbar) #jsoncpp
set(jsoncpp_include_dir "/home/leoxae/apps/jsoncpp/1.8.4/include")
set(jsoncpp_link_dir "/home/leoxae/apps/jsoncpp/1.8.4/lib") include_directories(${jsoncpp_include_dir})
link_directories(${jsoncpp_link_dir})
link_libraries(jsoncpp) #动态链接
#target_link_libraries(pedestrian_detection ${OpenCV_LIBS} )
target_link_libraries(QRcode ${OpenCV_LIBS} )
target_link_libraries(QRcode jsoncpp)
target_link_libraries(QRcode zbar)

最新文章

  1. 11月13日上午ajax返回数据类型为JSON数据的处理
  2. sed
  3. background复合属性详解(上):background-image
  4. mysql 连接空闲超8小时自动断开连接问题(linux)
  5. 网络编程:Http通信与Socket通信
  6. Jmeter使用指南
  7. HW3.1
  8. Managed Switch: Confs
  9. C# Task 源代码(2)
  10. shell之参数传递
  11. WPF 绑定密码
  12. 是否可能两个ETH私钥对应同一个地址
  13. vuepress 学习心得
  14. 把多个字符串里面的项写到不同的对象中,然后在push到一个数组中
  15. adb is down 的解决方法
  16. 数据库管理系统的ACID特性
  17. 使用axios实现上传图片进度条
  18. Java Mongodbjar包下载网址
  19. iperf 指令
  20. 这两天对OKR简单总结

热门文章

  1. navicate连接Mysql5.7时,显示Access denied for user &#39;root&#39;@&#39;localhost&#39; (using password: YES) 错误
  2. nodejs-Child Process模块
  3. Sharding-JDBC 实现水平分库分表
  4. Oracle之DBMS_LOCK包用法详解
  5. 【Linux】【Services】【SaaS】Docker+kubernetes(1. 基础概念与架构图)
  6. pipeline 步骤
  7. 离散数学3.1&amp;&amp;3.3
  8. iOS-启动项目(一)设置 rootViewController
  9. 【教程】OBS直播推流教程(Windows &amp; macOS)
  10. JuiceFS 数据加密原理