基于OpenCV程序调试

安装OpenCV-3.4.1

1、从官网下载安装包,将文件复制到home目录下进行解压:
unzip opencv-3.4.1.zip

2、解压后进入文件夹安装依赖库和cmake
cd opencv-3.4.1
在这里插入图片描述

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

3、安装完cmake之后执行命令 ,创建编译文件夹并进入:
在这里插入图片描述

  • cmake一下:

在这里插入图片描述

  • 等待编译完成:sudo make

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

  • 执行命令:sudo make install

在这里插入图片描述
执行完毕后OpenCV编译过程就结束了

  • 配置OpenCV编译环境:sudo gedit /etc/ld.so.conf.d/opencv.conf

在这里插入图片描述

  • 在弹出的空白文件内添加/usr/local/lib,保存并退出
  • 执行sudo ldconfig使配置路径生效
  • 配置bash

在这里插入图片描述

  • 在打开的文本末尾添加:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  
export PKG_CONFIG_PATH  
  • 保存并退出
  • 执行source /etc/bash.bashrc使配置生效
  • 更新sudo updatedb

用OpenCV打开图片并进行特效显示

  • 在OpenCV下新建文件夹mytest,并建立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;
}

  • 编译运行:

在这里插入图片描述
图片与test1.cpp需在同一目录下
在这里插入图片描述

openev的应用

1、在opencv3.4.1下编写一个打开摄像头显示处理视频的程序代码camera.cpp

#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
        VideoCapture capture(0);
        while (1)
        {
                Mat frame;
                capture >> frame;
                imshow("读取视频帧",frame);
                waitKey(30);
        }
        system("pause");
        return 0;
}
  • 保存并编译

在这里插入图片描述

  • 运行结果:

在这里插入图片描述
成功打开摄像头

对该实验问题的解答

1、如果要打开一个硬盘上的视频文件来播放,可以修改程序中语句

VideoCapture capture("name.mp4")

2、程序中Mat是一个类,可以分为两个部分矩阵头和指向像素数据的矩阵指针。waitkey是每一帧的显示时间,要是没有延时,窗口就会一闪而过,所以不能删除它;
3、改善Ctrl+c关闭摄像头的方式,在里面加代码如下,就可以直接按esc关闭摄像头

#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
VideoCapture capture(0);
while(1)
{
Mat frame;
capture >> frame;
imshow("读取视频帧",frame);
if(frme.empt())
{break;}
waitKey(30);
}
system("pause");
return 0;
}

总结

本次实验过程中遇到了不少问题,比如依赖库的安装、test1.cpp程序运行无响应、摄像头无法正常打开等问题,在咨询同学以及查询资料后陆续得到了解决,这也让我们更加熟练地掌握了嵌入式系统的指令。

参考资料

【嵌入式】Ubantu16.04下OpenCV安装教程
【嵌入式】基于opencv的人脸视频采集及实时检测

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页