ubuntu18.04中visp二维码
时间: 2025-04-25 07:26:12 浏览: 26
### 使用Visp库在Ubuntu 18.04上实现二维码的生成与读取
#### 安装依赖项
为了能够在Ubuntu 18.04 LTS环境中顺利安装并使用ViSP库来处理二维码,需先确保系统已更新至最新状态,并安装必要的软件包。
```bash
sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install build-essential cmake git pkg-config libopencv-dev python3-opencv ros-melodic-desktop-full -y
```
#### 获取并编译ViSP源码
由于特定版本的需求,在此选择指定版本的ViSP进行下载和构建。对于本案例中的需求,即为`v3.3.1`标签下的发布版[^1]。
```bash
cd ~/
git clone --branch v3.3.1 https://github.com/lagadic/visp.git visp-3.3.1
mkdir ~/visp-build && cd ~/visp-build
cmake ../visp-3.3.1 \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DBUILD_SHARED_LIBS=ON \
-DUSE_PCH=OFF \
-DVISP_BUILD_EXAMPLE=ON \
-DVISP_BUILD_TUTORIAL=ON \
-DVISP_BUILD_VISION=ON \
-DVISP_WITH_QRCODE=ON
make -j$(nproc)
sudo make install
```
注意上述命令中加入了 `-DVISP_WITH_QRCODE=ON` 参数以启用QRCode支持功能。
#### 编写C++程序用于生成和解析二维码
下面给出一段简单的C++代码片段作为示例展示如何利用ViSP完成基本的二维码操作:
```cpp
#include <iostream>
#include <visp3/core/vpConfig.h>
#if defined(VISP_HAVE_OPENCV) && (VISP_CXX_STANDARD >= VISP_CXX_STANDARD_11)
#include <visp3/gui/vpDisplayGDI.h>
#include <visp3/gui/vpDisplayX.h>
#include <visp3/io/vpImageIo.h>
#include <visp3/io/vpParseArgv.h>
#include <visp3/vision/vpPose.h>
#include <visp3/qrcode/vpQRSimpleReader.h> // QR code reader header file
#include <visp3/qrcode/vpQRRawDataGenerator.h> // QR code generator header file
int main()
{
try {
vpImage<unsigned char> I(480, 640); // Create an empty image with a given size
// Generate QR Code content as raw data
std::string qrContent = "Hello from ViSP!";
unsigned int version;
bool microVersion;
vpQRRawDataGenerator::generate(qrContent.c_str(), &I, version, microVersion);
// Display generated QR Code on screen or save it into PNG format.
vpImageIo::write(I, "/tmp/generated_qrcode.png");
// Read back the saved QR Code and decode its message
vpQRSimpleReader qrcode_reader;
if (!qrcode_reader.decode("/tmp/generated_qrcode.png")) {
throw(vpException(vpException::ioError, "Cannot read QR Code"));
}
const auto& decoded_message = qrcode_reader.getMessage();
std::cout << "Decoded Message: \"" << decoded_message << "\"" << std::endl;
return EXIT_SUCCESS;
}
catch(const vpException& e){
std::cerr << "Caught exception: " << e.what() << std::endl;
return EXIT_FAILURE;
}
}
#endif
```
该例子展示了怎样通过调用 `vpQRRawDataGenerator::generate()` 函数创建自定义文本内容对应的二维码图像;以及借助于 `vpQRSimpleReader` 类实例化对象去识别存储于文件系统的二维码图片进而获取其中所含的信息字符串。
#### 构建与运行测试程序
保存以上代码到名为`test_qrcode.cpp` 的文件之后,可以按照如下方式对其进行编译链接及执行验证效果:
```bash
g++ test_qrcode.cpp $(pkg-config --cflags --libs opencv4 visp-core visp-vision visp-qrcode) -o test_qrcode.out
./test_qrcode.out
```
如果一切正常的话,则会在终端打印出解码后的消息:“Decoded Message:"Hello from ViSP!"" 同时还会有一个位于 `/tmp/generated_qrcode.png` 路径下新产生的PNG格式二维码图形文件可供查看。
阅读全文
相关推荐









