【树莓派c++图像处理起航1】

news2025/3/12 11:57:28

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、Qt OPENCV 安装测试?
    • 1. 安装qt
    • 2.安装opencv 的基础库
    • 3. 安装的路就决定了不会一帆风顺
      • 3.1.QT 安装出错
      • 3.2 运行Qt错误
    • 4. opencv实际路径,添加入Qt工程中
  • 二、使用步骤
    • 1.框架
      • 1. 开启摄像头
      • 2.获取显示图像的内容
    • 2.测试
      • 2.1opencv 调用摄像头发现调用失败反复查找问题,
        • 2.1.1查看摄像头所有参数指令
  • 三、接着测试
    • 1.出现问题1:
    • 2.中途去开启了摄像头做了重启
    • 3.效果如图所示:
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

嵌入式图像处理


提示:以下是本篇文章正文内容,下面案例可供参考

一、Qt OPENCV 安装测试?

示例:树莓派opencv 的安装方法很多,

  • 一种是下载源码编译然后安装,这种叫做大神。要最新,要全还得自己编译。
  • 一种是通过指令直接下载对应的opencv依赖项,应该是树莓派生态比较好,所以能应用的资源比较多。
    以下是这类安装的方法,但是就是这类的安装还是有一堆问题
    c++ opencv 树莓派运行往下将变得简单,

1. 安装qt

输入一下指令

sudo apt-get install qt5-default
sudo apt-get install qtcreator

在这里插入图片描述
Qt 安装完毕后记得检测一下编译器路径是否对了。
在这里插入图片描述

2.安装opencv 的基础库

一直以为安装opencv c++的库要重新编译树莓派环境下的源码,直到看了大佬的视频才明白,原来只安装依赖项就可以用了,这个真的很省事
命令如下:安装往后记得找一下文件的路径

sudo apt-get install libopencv-dev

sudo find / -name "libopencv_core.so"

在这里插入图片描述

3. 安装的路就决定了不会一帆风顺

3.1.QT 安装出错

安装时遇到错误,
在ubuntu22.04上安装qt5-defualt时,我会得到以下错误。

sudo apt-get install qt5-default
复制
产出:

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Package qt5-default is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'qt5-default' has no installation candidate

Stack Overflow用户
发布于 2022-10-18 20:28:25

Ubuntu22.04存储库没有qt5-默认包。
解决了Qt安装出错的问题

您可以通过安装qtbase5 5-dev来获得预构建的库。

sudo apt install qtbase5-dev qt5-qmake

在这里插入图片描述

3.2 运行Qt错误

在这里插入图片描述
在这里插入图片描述
更改编译器,解决了Qt运行出错的问题
在这里插入图片描述
查找摄像头设备,为测试做准备
在这里插入图片描述

在这里插入图片描述

4. opencv实际路径,添加入Qt工程中

INCLUDEPATH +=/usr/include/opencv4\
/usr/include/opencv4/opencv2

LIBS +=usr/lib/arm-linux-gnueabihf/libopencv_*.so

在这里插入图片描述
在这里插入图片描述

二、使用步骤

1.框架

在这里插入图片描述

1. 开启摄像头

测试:
静态图像
动态图像

raspistill  //静态图像
raspivid    //动态图像

2.获取显示图像的内容

代码

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    mainwindow.cpp

HEADERS += \
    mainwindow.h

FORMS += \
    mainwindow.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target


INCLUDEPATH +=/usr/include/opencv4\
/usr/include/opencv4/opencv2

LIBS +=/usr/lib/arm-linux-gnueabihf/libopencv_*.so
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QLabel>
#include <QPixmap>
#include <QFileDialog>
#include <QDebug>


#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>


using namespace cv;

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_pushButton_clicked()
{

    // 读取图像文件
//    Mat image = imread("1.jpg");

//    // 将OpenCV图像转换为Qt图像类型
//    QImage qImage(image.data, image.cols, image.rows, QImage::Format_RGB888);
//    QPixmap qPixmap = QPixmap::fromImage(qImage);
//    ui->label->setPixmap(qPixmap);

    // 创建窗口和标签来显示图像
   // QWidget window;
   // QLabel label(this);

//    label.setPixmap(qPixmap);
   // window.setCentralWidget(&label);
    //window.show();


   // Mat image = imread("1.jpg");

    // 将OpenCV图像转换为Qt图像类型
//    QImage qImage(image.data, image.cols, image.rows, QImage::Format_RGB888);
//    QPixmap qPixmap = QPixmap::fromImage(qImage);
//    ui->label->setPixmap(qPixmap);

    QString fileName = QFileDialog::getOpenFileName(this, "选择图片", "", "Images (*.jpg *.png)");

          if (!fileName.isEmpty()) {
              // 读取OpenCV图片
              cv::Mat image = cv::imread(fileName.toUtf8().constData(), cv::IMREAD_COLOR);

              if (!image.empty()) {
                  // 将OpenCV图片转换为Qt格式
                  QImage qtImage = QImage((const unsigned char*)(image.data), image.cols, image.rows, image.cols * image.channels(), QImage::Format_RGB888);

                  // 显示图片在标签中
                  ui->label->setPixmap(QPixmap::fromImage(qtImage));
                  //imageLabel->setPixmap(QPixmap::fromImage(qtImage));
              } else {
                  qDebug() << "Failed to load image:" << fileName;
              }
          }

}


2.测试

2.1opencv 调用摄像头发现调用失败反复查找问题,

2.1.1查看摄像头所有参数指令
ls /dev/video*
v4l2-ctl --info -d /dev/video0 --list-formats-ext

查看结果

pi@raspberrypi:~ $ s /dev/video*
bash: s: command not found
pi@raspberrypi:~ $  /dev/video*
bash: /dev/video0: Permission denied
pi@raspberrypi:~ $ ls /dev/video*
/dev/video0   /dev/video12  /dev/video15  /dev/video19  /dev/video22
/dev/video10  /dev/video13  /dev/video16  /dev/video20  /dev/video23
/dev/video11  /dev/video14  /dev/video18  /dev/video21  /dev/video31
pi@raspberrypi:~ $ v4l2-ctl --info -d /dev/video0 --list-formats-ext
Driver Info:
	Driver name      : unicam
	Card type        : unicam
	Bus info         : platform:fe801000.csi
	Driver version   : 6.1.21
	Capabilities     : 0xa5a00001
		Video Capture
		Metadata Capture
		Read/Write
		Streaming
		Extended Pix Format
		Device Capabilities
	Device Caps      : 0x25200001
		Video Capture
		Read/Write
		Streaming
		Extended Pix Format
Media Driver Info:
	Driver name      : unicam
	Model            : unicam
	Serial           : 
	Bus info         : platform:fe801000.csi
	Media version    : 6.1.21
	Hardware revision: 0x00000000 (0)
	Driver version   : 6.1.21
Interface Info:
	ID               : 0x03000005
	Type             : V4L Video
Entity Info:
	ID               : 0x00000003 (3)
	Name             : unicam-image
	Function         : V4L2 I/O
	Flags         : default
	Pad 0x01000004   : 0: Sink
	  Link 0x02000007: from remote pad 0x1000002 of entity 'ov5647 10-0036': Data, Enabled, Immutable
ioctl: VIDIOC_ENUM_FMT
	Type: Video Capture

	[0]: 'YUYV' (YUYV 4:2:2)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[1]: 'UYVY' (UYVY 4:2:2)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[2]: 'YVYU' (YVYU 4:2:2)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[3]: 'VYUY' (VYUY 4:2:2)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[4]: 'RGBP' (16-bit RGB 5-6-5)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[5]: 'RGBR' (16-bit RGB 5-6-5 BE)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[6]: 'RGBO' (16-bit A/XRGB 1-5-5-5)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[7]: 'RGBQ' (16-bit A/XRGB 1-5-5-5 BE)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[8]: 'RGB3' (24-bit RGB 8-8-8)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[9]: 'BGR3' (24-bit BGR 8-8-8)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[10]: 'RGB4' (32-bit A/XRGB 8-8-8-8)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[11]: 'BA81' (8-bit Bayer BGBG/GRGR)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[12]: 'GBRG' (8-bit Bayer GBGB/RGRG)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[13]: 'GRBG' (8-bit Bayer GRGR/BGBG)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[14]: 'RGGB' (8-bit Bayer RGRG/GBGB)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[15]: 'pBAA' (10-bit Bayer BGBG/GRGR Packed)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[16]: 'BG10' (10-bit Bayer BGBG/GRGR)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[17]: 'pGAA' (10-bit Bayer GBGB/RGRG Packed)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[18]: 'GB10' (10-bit Bayer GBGB/RGRG)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[19]: 'pgAA' (10-bit Bayer GRGR/BGBG Packed)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[20]: 'BA10' (10-bit Bayer GRGR/BGBG)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[21]: 'pRAA' (10-bit Bayer RGRG/GBGB Packed)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[22]: 'RG10' (10-bit Bayer RGRG/GBGB)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[23]: 'pBCC' (12-bit Bayer BGBG/GRGR Packed)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[24]: 'BG12' (12-bit Bayer BGBG/GRGR)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[25]: 'pGCC' (12-bit Bayer GBGB/RGRG Packed)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[26]: 'GB12' (12-bit Bayer GBGB/RGRG)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[27]: 'pgCC' (12-bit Bayer GRGR/BGBG Packed)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[28]: 'BA12' (12-bit Bayer GRGR/BGBG)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[29]: 'pRCC' (12-bit Bayer RGRG/GBGB Packed)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[30]: 'RG12' (12-bit Bayer RGRG/GBGB)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[31]: 'pBEE' (14-bit Bayer BGBG/GRGR Packed)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[32]: 'BG14' (14-bit Bayer BGBG/GRGR)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[33]: 'pGEE' (14-bit Bayer GBGB/RGRG Packed)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[34]: 'GB14' (14-bit Bayer GBGB/RGRG)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[35]: 'pgEE' (14-bit Bayer GRGR/BGBG Packed)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[36]: 'GR14' (14-bit Bayer GRGR/BGBG)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[37]: 'pREE' (14-bit Bayer RGRG/GBGB Packed)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[38]: 'RG14' (14-bit Bayer RGRG/GBGB)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[39]: 'GREY' (8-bit Greyscale)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[40]: 'Y10P' (10-bit Greyscale (MIPI Packed))
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[41]: 'Y10 ' (10-bit Greyscale)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[42]: 'Y12P' (12-bit Greyscale (MIPI Packed))
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[43]: 'Y12 ' (12-bit Greyscale)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[44]: 'Y14P' (14-bit Greyscale (MIPI Packed))
		Size: Stepwise 16x16 - 16376x16376 with step 1/1
	[45]: 'Y14 ' (14-bit Greyscale)
		Size: Stepwise 16x16 - 16376x16376 with step 1/1

三、接着测试

本来以为很ok了,结果还是遇到了大问题;
调用:
videocapture =new VideoCapture(0, cv::CAP_V4L2);

1.出现问题1:

open VIDEOIO(V4L2:/dev/video0): can‘t open camera by index

解决:
参考链接:

https://blog.csdn.net/u011304078/article/details/132740921

输入: ls /dev/video* -l    
  1. 这个是权限问题,直接通过chmod修改摄像头的权限,如果摄像头挂载到系统的设备名是/dev/video0,输入如下命令后,问题得到解决。
sudo chmod 777 /dev/video0

2.中途去开启了摄像头做了重启

打开摄像头模块
1、在树莓派终端中输入以下命令,打开配置:

sudo raspi-config

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3.效果如图所示:

在这里插入图片描述
Qt 安装好后的软件展示
在这里插入图片描述

总结

学习框架和测试,用一种不用编译opencv源码的方式,成功的将Qt和opencv 用c++的方式运行了起来,写了基本图像处理的框架,接下来将测试摄像头的参数和相关设置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1113218.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

汽车辅助系统

目录 一&#xff0c;项目描述 二&#xff0c;项目 功能 三&#xff0c;代码实现 &#xff08;1&#xff09;倒车雷达 (2)AD&#xff08;对 雨滴与光敏电阻传感器进行AD采集&#xff09; &#xff08;3&#xff09;雨刷 &#xff08;4&#xff09;灯光 最后总结&#xf…

干货分享:网页录屏的免费方法!

“网页怎么录屏呀&#xff0c;在浏览器看到一篇文章&#xff0c;觉得挺有价值的&#xff0c;想保存下来&#xff0c;但是不能下载&#xff0c;也不可以复制粘贴&#xff0c;朋友说可以录下来保存&#xff0c;想问问大家&#xff0c;有什么好用免费的网页录屏方法推荐吗&#xf…

Python入门指南

概述&#xff1a; Python是一种简单易学、功能强大的编程语言&#xff0c;广泛应用于数据分析、Web开发、人工智能等领域。本文将为初学者提供一个Python入门指南&#xff0c;从安装到基本语法&#xff0c;帮助您开始编写Python程序。 第一部分&#xff1a;安装Python 1、进入…

单链表经典OJ题 :分割链表

题目&#xff1a; 给你一个链表的头节点 head 和一个特定值 x&#xff0c;请你对链表进行分隔&#xff0c;使得所有小于x 的节点都出现在 大于或等于 x 的节点之前。 你不需要保留 每个分区中各节点的初始相对位置。 图例&#xff1a; 本题的意思&#xff1a; 给定一个数值&am…

C# Onnx Yolov8 Detect 红绿灯检测

效果 lable GreenCircular GreenLeft GreenRight GreenStraight RedCircular RedLeft RedRight RedStraight 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; usi…

从零开始探索C语言(十二)----预处理器、输入输出及文件读写

文章目录 1. 预处理器1.1 预处理器实例1.2 预定义宏1.3 预处理器运算符1.4 参数化的宏 2. 输入和输出2.1 getchar() & putchar() 函数2.2 gets() & puts() 函数 3. 文件读写3.1 打开文件3.2 关闭文件3.3 写入文件3.4 读取文件3.5 二进制 I/O 函数 4. typedef 和 #defin…

YOLOv8改进实战 | 更换主干网络Backbone之轻量化模型Efficientvit

前言 轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法: 网络剪枝:移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。分组卷积:将卷积操作分解为若干个较小的卷积操作,并将它们分别作用于输入的不…

【java】【MyBatisPlus】【一】快速入门程序

目录 1、创建空项目mybatisProject 2、创建springboot模块 3、删除多余文件 4、修改pom&#xff0c;引入mybatisplus 5、设置application.yml 6、准备实体Emp 7、创建EmpMapper接口 8、测试MybatisQuickstartApplicationTests 前言&#xff1a;学习MyBatisPlus的基本使…

想要隐藏Word文件内容,如何做?四个方法!

Word文件中有些内容想要隐藏&#xff0c;该如何隐藏&#xff1f;今天分享几个方法给大家 方法一&#xff1a; 最简单的方法&#xff0c;将字体颜色与背景颜色设置为一致的&#xff0c;这样就达到了隐藏的效果&#xff0c;选中文字再修改颜色就可以恢复字体 方法二&#xff1a…

MaaS,云厂商在打一场“翻身仗”

今年以来&#xff0c;大模型的热度&#xff0c;让云计算产业为之沸腾。要举出一个最有力的证明&#xff0c;应该是&#xff1a;MaaS&#xff08;Model as Service&#xff09;这种全新模式的出现&#xff0c;一座座“模型工厂”&#xff0c;已经建起来了。 所谓MaaS&#xff0c…

怎样才能去除视频中的背景音乐,保留人声?

做视频剪辑&#xff0c;二次创作的朋友&#xff0c;需要去除视频中的背景音乐&#xff0c;保留人声&#xff1b;或者去除人声&#xff0c;保留背景音乐。如果请身边做视频的朋友帮忙&#xff0c;可有时不能沟通到位&#xff0c;完成后的效果并不是很理想&#xff0c;就很尴尬了…

Leetcode—283.移动零【简单】

2023每日刷题&#xff08;三&#xff09; Leetcode—283.移动零 双指针法yyds&#xff01; void moveZeroes(int* nums, int numsSize){// 双指针法int left 0, right 0;while(right < numsSize) {if(nums[right] ! 0) {int tmp nums[right];nums[right] 0;nums[left]…

【C++】auto 范围for nullptr

目录 一&#xff0c;auto 1&#xff0c;类型别名思考 2&#xff0c;auto 简介 3&#xff0c;auto 的使用细则 1&#xff0c;auto 与指针和引用结合起来使用 2&#xff0c;同一行定义多个变量 3&#xff0c;auto 不能推导的场景 二&#xff0c;基于范围的for循环 1&…

音频信号的频谱分析实例

在前面的文章 信号频谱分析与功率谱密度 中&#xff0c;我们初步探讨了信号频谱分析的概念&#xff0c;并介绍了其数学工具。本篇文章将结合实例&#xff0c;进一步探讨频谱分析在音频信号处理中的应用。 音频信号的频谱分析是一种将时域中的音频信号转换为频域表示的过程&…

华为云CodeArts IDE for Java安装使用教程

本篇内容主要介绍使用华为云CodeArts IDE for Java创建工程、代码补全、运行调试代码、Build构建和测试相关的主要功能。 一、下载安装华为云CodeArts IDE for Java 华为云CodeArts IDE for Java安装要求 至少需要 2 GB RAM &#xff0c;但是推荐8 GB RAM; 至少需要 2.5 GB 硬…

C# Onnx Yolov8 Detect 指纹检测

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;namespace Onnx…

钢水包升降翻转液压系统比例阀放大器

钢水包升降翻转液压系统是一种用于控制钢水包升降和翻转的液压系统。该系统主要由液压泵、液压缸、控制阀和一些辅助元件组成。 钢水包升降翻转液压系统的液压泵将油从油箱中抽出&#xff0c;将油压力提高到一定值&#xff0c;然后通过控制阀将油分配到液压缸中。液压缸内的活…

https证书

SSL证书的作用是确保通过网站传输的数据在客户端和服务器之间是安全、私密的。 它通过建立安全的通信通道来防止数据泄露、中间人攻击以及篡改等安全威胁&#xff0c;提供了身份认证和数据加密的功能。 这样可以确保用户在网站上提交的敏感信息&#xff0c;如个人数据、公司信…

linux常见命令-时间日期类、搜索查找类、压缩和解压类

一、时间日期类 1.date 指令-显示当前日期 基本语法 1) date (功能描述:显示当前时间) 2) date %Y (功能描述:显示当前年份) 3) date %m (功能描述:显示当前月份) 4) date %d (功能描述:显示当前是哪一天) 5) date "%Y-%m-%d %H:%M:%S" (功能描述:显示年月…