目录
- 一、GDB调试简例
-
- 二、OpenCV入门
- 2.1 在Windows下使用OpenCV-3.4.8
- 2.1.1 OpenCV的安装与配置
- 2.1.2 一个简单的OpenCV对图片特效显示例子
- 2.2 在Ubuntu18.04下使用OpenCV-3.4.8
- 2.2.1 OpenCV的安装与配置
- 2.2.2 一个简单的OpenCV对图片特效显示例子
- 2.2.3 用OpenCV调用摄像头录制视频
- 2.3在树莓派下下使用OpenCV-3.4.8
作业要求:
1、在Ubuntu18.04下使用GDB调试一个简单的程序
2、学习在Windows、Ubuntu、树莓派下使用OpenCV对图片特效显示,利用OpenCV库编写打开摄像头、拍摄视频
一、GDB调试简例
1.1 例1
新建一个 gbdtest.c 文件,并通过gcc指令生成gbdtest文件,gbdtest.c代码如下
#include <stdio.h>
void ShowRevertNum(int iNum)
{
while (iNum > 10)
{
printf("%d", iNum % 10);
iNum = iNum / 10;
}
printf("%d\n", iNum);
}
int main(void)
{
int iNum;
printf("Please input a number :");
scanf("%d", &iNum);
printf("After revert : ");
ShowRevertNum(iNum);
}
指令:
gcc -o gdbtest -g gdbtest.c
tips:万万不可少加 -g 否则无法调试
接下来利用gdb调试该程序,图片很清晰,就不贴出指令段了
1.2 例2
新建一个 duantest.c 文件,进行段错误调试,源代码如下
#include <stdio.h>
#include <string.h>
#define BUFSIZE 256
static char acBuf[BUFSIZE];
static char *pStr;
int main(void)
{
printf("please input a str:");
gets(pStr);
printf("\nU str is:%s\n", pStr);
}
如同例1,对duantest.c文件进行编译
直接执行后,可看到系统报错 “段错误 (核心已转储)”,接下来就开始进入gdb调试
二、OpenCV入门
2.1 在Windows下使用OpenCV-3.4.8
2.1.1 OpenCV的安装与配置
在 OpenCV 的官网获取 Windows版 和 Sources版 (之后在Ubuntu系统中要使用Sources版)
下载好 Windows版 后,直接运行安装程序
tips:安装完成后,需要配置系统环境变量:在path中添加以下路径:“X:\…\opencv3XX\opencv\build\x64\vc15\bin”
在VS中新建一个Visual C++空项目,这个项目就用来编写我们第一个OpenCV程序,但我们首先要配置它的环境。
在工程文件中新建一个 test.cpp 项
顺便把Debug类型调为x64
在 “属性管理器–>配置属性” 中修改 “包含目录” , “库目录” , “连接器/输入/添加依赖项”
这些路径都存在于OpenCV的安装路径下,修改好之后,就算是将工作环境搭建好了。
2.1.2 一个简单的OpenCV对图片特效显示例子
现在借鉴一个例子,目的是将照片灰度改变并显示,并自动保存改变灰度后的图片到项目工程文件夹中。
代码如下:
#include <highgui.hpp>
#include <opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
CvPoint center;
double scale = -3;
IplImage* image = cvLoadImage("D://Code//testResourses//testimg.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;
}
编译运行
程序成功运行,并保存了改变灰度后的图片
2.2 在Ubuntu18.04下使用OpenCV-3.4.8
2.2.1 OpenCV的安装与配置
将之前下载好的 OpenCV Sources版 的压缩文件拷贝到Ubuntu系统下
在终端里键入以下命令解压缩 OpenCV文件夹
unzip opencv-3.4.8sourcestype.zip
进入解压好的文件夹中,再创建一个编译文件夹,进入文件夹开始配置
mkdir build_dir
cd build_dir
执行 cMake 指令
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local …
执行make指令,等待编译完成
sudo make
tips:这一步可以写成 “sudo make -j4” 意为使用四线程进行编译,速度会很快
等待make编译完成后键入命令
sudo make install
等待完成后,我们就成功的安装了OpenCV,接下来我们配置OpenCV的编译环境
首先将OpenCV的库添加到系统路径
键入命令
sudo gedit /etc/ld.so.conf.d/opencv.conf
打开文件后添加一句
/usr/local/lib
保存后执行
sudo ldconfig
让刚才的配置路径生效
接下来键入命令配置bash
sudo gedit /etc/bash.bashrc
在最末尾添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
保存退出,键入以下命令让配置生效
source /etc/bash.bashrc
更新
sudo updatedb
tips:这一步很可以出现 “找不到命令 updatedb” 的错误,但是实测对之后的运行过程并无影响,最好还是参考
ubuntu命令updatedb报错: command not found解决方案
将错误解决
至此,环境配置结束,环境配置过程中可能出现许多问题,我给大家分享一些参考资料:
1.在 Ubuntu系统下安装 OpenCV 全过程
2.【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程
3.Linux配置OpenCV遇到的头文件路径的问题
4.ubuntu18.04 安装OpenCV3.4.1踩坑过程
2.2.2 一个简单的OpenCV对图片特效显示例子
紧接上一个过程,接下来用一个如同 2.1.2 的例子测试OpenCV
在 opencv-3.4.8 下新建文件夹 /test ,在 /test 文件夹下新建一个 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("testimg.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;
}
把图片放在 /home 目录下
mv testimg.jpg /home
接下来使用 gcc(g++) 编译即可成功得到test文件,直接运行 test 文件可成功得到结果
g++ test.cpp -o test pkg-config --cflags --libs opencv
./test
2.2.3 用OpenCV调用摄像头录制视频
首先用 Ubuntu 自带的 Cheess(茄子) 软件测试一下摄像头是否正常工作,若不是,请参考这里
借鉴 Ctrl C +V 一个开启摄像头并录制视频的例子,给它起名叫camtest.cpp
#include<stdio.h>
#include<math.h>
#include "highgui.h"
#include <cv.h>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
int main( int argc, char** argv )
{
printf("I am start \n");
VideoCapture cap(0);
if(!cap.isOpened())
return -1;
printf("%f, %f\n",cap.get(CV_CAP_PROP_FRAME_WIDTH),cap.get(CV_CAP_PROP_FRAME_HEIGHT));
cap.set(CV_CAP_PROP_FRAME_WIDTH, 320);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 240);
cap.set(CV_CAP_PROP_FPS, 15);
printf("%f, %f\n",cap.get(CV_CAP_PROP_FRAME_WIDTH),cap.get(CV_CAP_PROP_FRAME_HEIGHT));
Mat src_gray;
cvNamedWindow( "video", CV_WINDOW_AUTOSIZE );
while(1)
{
Mat frame;
cvWaitKey(10);
cap >> frame;
imshow("video", frame);
}
return 0;
}
键入指令编译生成可执行文件 camtest ,运行它
gcc camtest.cpp -o camtest pkg-config --cflags --libs opencv
./camtest
成功运行。
2.3在树莓派下下使用OpenCV-3.4.8
由于没有在 树莓派3B+ 上安装截图的工具,我仅仅贴上了运行结果的照片,安装 OpenCV 和配置环境的过程都与 Ubuntu 相仿,编译程序过程也是按部就班,所以请参照2.2的部分
之后会更新"从零开始的树莓派":把树莓派从无感情的电路板装配成掌上电脑的过程,敬请期待。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)