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 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Ubuntu18.04使用opencv库编写 -> 正文阅读

[人工智能]Ubuntu18.04使用opencv库编写

目录

一.示例:图片

二.示例:视频

1.虚拟机获取摄像头权限

?2.打开摄像头录制视频

?三.总结

四.参考资料


一.示例:图片

创建test1.cpp文件?

gedit test1.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("lena.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;Mat dst;
?? ?src = cvarrToMat(image);
?? ?cv::imwrite("test.png", src);

? ? cvNamedWindow("test",1); ??? ?imshow("test", src);
?? ? cvWaitKey();
?? ? return 0;
}

编译文件:

c++文件编译命令:g++ test1.cpp -o test1 `pkg-config --cflags --libs opencv`

?

在同一文件夹下准备一张图片,文件名为:lena.jpg

执行命令 ./test1

?

?由lena.jpg生成了test.png

二.示例:视频

1.虚拟机获取摄像头权限

VirtualBox 需要安装?Oracle VM VirtualBox Extension Pack?才能使用摄像头。

进入 VirtualBox 官网下载页面:Downloads – Oracle VM VirtualBox

进入后下载和virtualbox同版本的扩展包

在 管理 -> 全局设定 -> 扩展 -> 新增下载好的 Oracle VM VirtualBox Extension Pack 并安装

?

?2.打开摄像头录制视频

创建一个test3.cpp文件

gedit test3.cpp

复制代码

/*********************************************************************
打开电脑摄像头,空格控制视频录制,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 cap(0);
?? ?if (!cap.isOpened())
?? ?{
?? ??? ?cout << "error" << endl;
?? ??? ?waitKey(0);
?? ??? ?return 0;
?? ?}

?? ?//获得cap的分辨率
?? ?int w = static_cast<int>(cap.get(CV_CAP_PROP_FRAME_WIDTH));
?? ?int h = static_cast<int>(cap.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)
?? ?{
?? ??? ?cap >> frame;
?? ??? ?key = waitKey(100);
?? ??? ?if (key == 32)//按下空格开始录制、暂停录制 ? 可以来回切换
?? ??? ?{
?? ??? ??? ?startOrStop = 1 - startOrStop;
?? ??? ??? ?if (startOrStop == 0)
?? ??? ??? ?{
?? ??? ??? ??? ?flag = 1;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?if (key == 27)//按下ESC退出整个程序,保存视频文件到磁盘
?? ??? ?{
?? ??? ??? ?break;
?? ??? ?}

?? ??? ?if (startOrStop == 0 && flag==1)
?? ??? ?{
?? ??? ??? ?writer << frame;
?? ??? ??? ?cout << "recording" << endl;
?? ??? ?}
?? ??? ?else if (startOrStop == 1)
?? ??? ?{
?? ??? ??? ?flag = 0;
?? ??? ??? ?cout << "end recording" << endl;
?? ??? ??? ?
?? ??? ?}
?? ??? ?imshow("picture", frame);
?? ?}
?? ?cap.release();
?? ?writer.release();
?? ?destroyAllWindows();
?? ?return 0;
}
编译 test3.cpp 文件。
g++ test3.cpp -o test3 `pkg-config --cflags --libs opencv`

输出: ./test3

空格键开始录制

Esc停止录制

?三.总结

在Ubuntu安装opencv步骤很多,中间出了很多问题。通过在网上参考解决了一些问题。这两个示例也让我感到了opencv的乐趣。

四.参考资料

Ubuntu18.04下OpenCV3.4.11的安装及使用示例_可乐有点好喝的博客-CSDN博客

Ubuntu18.04使用opencv库编写打开摄像头压缩视频_WOOZI9600L2的博客-CSDN博客

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-09-30 00:52:59  更:2022-09-30 00:56:42 
 
开发: 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年5日历 -2024/5/20 0:18:40-

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