IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Ubuntu中关于opencv的安装及使用 -> 正文阅读

[人工智能]Ubuntu中关于opencv的安装及使用


一、安装opencv的准备工作

1.安装cmake

sudo apt-get install cmake

2.安装依赖环境

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev

在安装依赖环境时,我遇到了个问题,就是要求更换介质。
输入

cd ~
vim /etc/apt/sources.list

注释掉开头第一行,deb cdrom就行
然后更新一下

apt-get uodate

现在安装依赖环境应该就不会出现问题了。

二、安装opencv

1.下载opencv
链接: https://www.bzblog.online/wordpress/index.php/2020/03/09/opencvdownload
进入后选择需要的版本,点进去如下,下载最后一个压缩包。(建议下载3.4.xx版本的,下更新的版本安装容易出错)
在这里插入图片描述
解压前,将下载的文件复制的自己想要的目录下,再进行提取文件,也就是解压。
在这里插入图片描述
2.鼠标右击opencv-3.4.11,点击在终端打开,然后建立build文件夹并进入该文件夹

mkdir build
cd build

3.通过cmake安装opencv
输入以下代码:

sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

稍等一会儿,等停止后进行编译,在这有几种方法,主要体现在安装速度不一样。

可以使用sudo make -j 8 、sudo make -j4 、sudo make 
我这里使用了·sudo make ,避免线路多了出错。

接下来又是漫长的等待,直到安装到100%。

最后进行安装,输入下述代码

sudo make install

4.配置环境
打开/etc/ld.so.conf

sudo gedit /etc/ld.so.conf

在文件最后一行加上include /uer/local/lib。点击保存。此时显示有隐患,问题不大,不用管。
在这里插入图片描述
运行sudo ldconfig,
修改bash.bashrc文件

sudo ldconfig
sudo gedit /etc/bash.bashrc 

在文件末尾加入:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
在这里插入图片描述
然后输入

source /etc/bash.bashrc

最后检查一下

pkg-config opencv --modversion

在这里插入图片描述
这就安装成功了。

三、使用opencv进行图片的特效显示

1.创建一个text3文件夹,用于保存本次的文件。

mkdir text3
cd text3

2.进入文件夹后编写程序test.cpp。

#include<opencv2/highgui.hpp>
#include<opencv2/opencv.hpp>
using namespace cv;
using namespace std;

//功能:对图片进行特效处理并显示
int main(int argc,char **argv)
{
        CvPoint center;
        double scale=-3;

        IplImage *image=cvLoadImage("star.jpg");
        argc==2?cvLoadImage(argv[1]):0;

        cvShowImage("image",image);

        if(!image) return -1;
        center=cvPoint(image->width/2,image->height/2);
        for (int i = 0;i<image->height;i++)
                for (int j = 0;j<image->width;j++) {
                        double dx = (double)(j - center.x) / center.x;
                        double dy = (double)(i - center.y) / center.y;
                        double weight = exp((dx*dx + dy*dy)*scale);
                        uchar* ptr = &CV_IMAGE_ELEM(image, uchar, i, j * 3);
                        ptr[0] = cvRound(ptr[0] * weight);
                        ptr[1] = cvRound(ptr[1] * weight);
                        ptr[2] = cvRound(ptr[2] * weight);
                }
        Mat src;
        src=cvarrToMat(image);
        imwrite("test.png",src);
        imshow("test",src);

        cvWaitKey();
        return 0;
}

2.编译程序
使用命令

gcc test.cpp -o test `pkg-config --cflags --libs opencv`

此时会报错,改为

g++ test.cpp -o test `pkg-config --cflags --libs opencv`

这条命令通过命令pkg-config --cflags --libs opencv获取
反引号表示输出字符串,所以使用g++ test.cpp -o test pkg-config --cflags --libs opencv编译程序时首先会将pkg-config --cflags --libs opencv替换为如下的OpenCV头文件和库文件的路径,从而获取OpenCV头文件、链接lib库文件的路径。
在这里插入图片描述
使用./test后,运行结果如下。
在这里插入图片描述

四、使用opencv对视频进行处理

1.使用电脑摄像头读取视频并显示程序如下
video.cpp

#include<opencv2/opencv.hpp>
using namespace cv;

int main()
{
        char key;
        VideoCapture capture(0);                //从摄像头读取视频
        while(1)                                //循环显示每一帧形成视频
        {
                Mat frame;                      //定义Mat变量储存每一帧图像
                capture>>frame;                 //读取当前帧
                imshow("读取视频",frame);       //显示当前帧
                waitKey(30);                  //延时
        }
        return 0;
}

2.使用电脑摄像头录制视频程序
video_record.cpp

/*********************************************************************
  @名字:video_record
  @功能:使用电脑摄像头录制视频
  @按键:空格视频录制,ESC 退出并保存视频 RecordVideo.avi
*********************************************************************/
#include<iostream>
#include<opencv2/opencv.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;

int main()
{
        VideoCapture capture(0);        //打开电脑摄像头
        if (!capture.isOpened())
        {
                cout << "error" << endl;
                waitKey(0);
                return -1;
        }

        int w = static_cast<int>(capture.get(CV_CAP_PROP_FRAME_WIDTH)); //获得capture的分辨率
        int h = static_cast<int>(capture.get(CV_CAP_PROP_FRAME_HEIGHT));

        Size videoSize(w, h);
        VideoWriter writer("RecordVideo.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25,videoSize);

        Mat frame;
        int key;                //记录键盘按键
        char startOrStop = 1;   //0开始录制视频; 1 结束录制视频
        char flag = 0;          //正在录制标志 0-不在录制; 1-正在录制
        while (1)
        {
                capture >> frame;
                key = waitKey(100);
                if (key == 32)                  //按下空格开始录制、暂停录制
                {
                        startOrStop =1-startOrStop;
                        if (startOrStop == 0)   flag = 1;       //可以来回切换
                }
                if (key == 27)  break;                  //按下 ESC 退出整个程序,保存视频文件到磁盘
                if (startOrStop == 0 && flag==1)
                {
                        writer << frame;
                        cout << "recording" << endl;
                }
                else if (startOrStop == 1 && flag==1)
                {
                        flag = 0;
                        cout << "pause recording" << endl;
                }
                imshow("picture", frame);
        }
        capture.release();
        writer.release();
        destroyAllWindows();
}

3.Ubuntu下使用摄像头
快捷键win+r打开运行,输入“services.msc”,回车。打开服务器
在服务器列表中,确保“VMware USB Arbitration Service”已打开。
虚拟机设置:
在虚拟机菜单栏中选择“虚拟机(M)”->选择“可移动设备”->选择“xxxx Camera”->选择“连接(断开与主机连接)”,设置完这项之后,虚拟机接管了笔记本摄像头。
在终端输入命令, 安装cheese
apt-get install cheese
输入命令cheese查看摄像头情况。
若无视频,在Vmware Workstation的“虚拟机”->“虚拟机设置”->“USB控制器”下,查看“USB兼容性”,如果当前是“USB2.0”就修改为“USB3.0”,反之就修改为“USB2.0”。然后再在“虚拟机”->“可移动设备”下重新连接Camera,cheese就可以正常出视频了。
在这里插入图片描述
4.1 如果要读取一个硬盘上的文件,就应将video.cpp中的 VideoCapture capture(0)改为 VideoCapture capture(”as.mp4")。
效果如下
在这里插入图片描述
4.2 在video.cpp的while循环中Mat是一个类,由两个数据部分组成:矩阵头(包含矩阵尺寸、存储方法、存储地址等信息)和一个指向存储所有像素值的矩阵(根据所选存储方法的不同,矩阵可以是不同的维数)的指针。
加入waitKey延时,这样便于刷新储存每一帧图像,不会造成视频卡顿之类的问题。如果不加入延时的话会导致视频显示窗口无法显示。
4.3 video代码会在while循环中一直运行,你如果试图用鼠标关闭图像显示窗口,会发现始终无法关掉。需要用键盘输入Ctrl+C强制中断程序,非常不友好。
可以在while循环里加入按键退出的代码如下(按q键退出)

key = waitKey(1) & 0xff;        //按q键退出
if(key == 'q') break;

五、总结及参考

难,就感觉难,很多东西都参考了网上的大神的教程。但是真的很有趣,过程中还是不可避免的问题多多,但处理了就会有较深刻的印象。努力学习吧,争取以后自己也能搞出来,并且还比较好。同时欢迎各位大神指点。
参考:
https://blog.csdn.net/public669/article/details/99044895
https://blog.csdn.net/qq_45237293/article/details/109391445
https://blog.csdn.net/ssj925319/article/details/109231145
https://blog.csdn.net/oXiaoXue123456789/article/details/107115584

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-11 17:31:30  更:2021-10-11 17:32:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 10:41:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码