【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程

目标:

  • windows、ubuntu、树莓派系统中安装opencv2.4.x 或者opencv3.4.x
  • windows、ubuntu、树莓派3个系统下,依次编写一个图片特性处理代码程序。(要求同时显示原始图片特效图片,并保存特效图片到文件中。)

目录

  • (一)Windows10安装opencv3.4.1
  • (二)ubantu16.04安装opencv-3.4.1
  • (三)树莓派3B+下安装opencv3.4.1(与第二步骤类似)

(一)Windows10安装opencv3.4.1

  1. 安装opencv3.4.1:官网下载Windows版
  2. 配置系统环境变量:在path中添加以下路径:“D:\mydownload\opencv341\opencv\build\x64\vc15\bin”,然后重启电脑!
    【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第1张图片
    (如果不添加path,运行项目时会遇见如下图情况;添加完path未重启也出现下图问题,切记重启!)
    【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第2张图片
  3. 基于VS2017写一个opencv调用灰度图片的项目:
    3.1 添加C++空项目Project1
    【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第3张图片
    3.2 右键添加项test1.cpp
    【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第4张图片
    3.3将debug调为X64,接下来都将在debug模式下进行配置
    在这里插入图片描述
    (如果没注意这一步骤,会有如下图报错:)
    【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第5张图片
    3.4 配置属性:(打开属性管理器:
    视图=》其他窗口=》属性管理器,在右侧栏出现属性管理器界面,点开,选择Debug x64右键“属性” )

3.5添加包含目录 、库目录、附加依赖项
【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第6张图片

  • 包含目录
    vc++目录=》包含目录=》选择编辑
    添加解压(安装)好的OpenCV路径,分别是include,include\opencv ,include\opencv2,建议三个都添加
    我的目录是(记得找到你的路径复制):
    【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第7张图片
    【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第8张图片
  • 添加库目录
    VC++目录=》库目录 解压(安装)好的OpenCV路径下
    我的是(记得找到你的路径复制):
    【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第9张图片
    【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第10张图片
  • 添加附加依赖项
    链接器=》输入=》附加依赖项 手动敲入 opencv_world341d.lib
    【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第11张图片
    配置完成后如图:
    【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第12张图片
    【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第13张图片
  1. 编写测试程序
  • 同时显示两张图片:
    【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第14张图片
  • 并自动保存改变灰度后的图片到项目工程文件夹中:
    【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第15张图片

源码

#include 
#include 
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
	CvPoint center;
	double scale = -3;
	IplImage* image = cvLoadImage("d://myworkspace//VisualStudioProjects//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;
}

(二)ubantu16.04安装opencv-3.4.1

2.1 官网下载Sources版本(下载很慢,重复下载很多次才成功,需要耐心)
【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第16张图片
2.2 将下载文件复制到home目录下,进行解压配置:
【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第17张图片
进入命令行模式:

  • 解压包
unzip opencv-3.4.1.zip

在这里插入图片描述

  • 进入到解压后的文件包中
cd opencv-3.4.1

在这里插入图片描述

  • 安装依赖库和cmake ,如果提醒需要apt-get update,那就先sudo su进入root权限,再sudo apt-get update,然后在执行下面命令
sudo apt-get install cmake  
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev libjasper-dev  
  • 安装完cmake之后执行命令 ,创建编译文件夹
mkdir my_build_dir
  • 进入文件夹进行配置
cd my_build_dir

【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第18张图片

  • cmake一下
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
  • 执行命令,漫长的编译过程
sudo make

【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第19张图片
下载完成:
【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第20张图片

  • 执行命令
sudo make install
  • sudo make install 执行完毕后OpenCV编译过程就结束了,接下来就需要配置一些OpenCV的编译环境首先将OpenCV的库添加到路径,从而可以让系统找到
sudo gedit /etc/ld.so.conf.d/opencv.conf 

执行此命令后打开的可能是一个空白的文件,不用管,只需要在文件末尾添加

/usr/local/lib  

【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第21张图片

  • 保存回到命令行界面
  • 执行如下命令使得刚才的配置路径生效
sudo ldconfig  
  • 配置bash
sudo gedit /etc/bash.bashrc  

在最末尾添加

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  
export PKG_CONFIG_PATH  

【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第22张图片

  • 保存,执行如下命令使得配置生效
source /etc/bash.bashrc  
  • 更新
sudo updatedb  

至此所有的配置都已经完成
2.3 Linux下编程:

  • 在opencv-3.4.1下新建文件夹mytest
cd opencv-3.4.1
mkdir mytest
  • 创建test.cpp
touch test.cpp
  • 进入编程
sudo gedit  /test.cpp
#sudo vim /test.cpp
#根据自己配置编辑器进行编辑

编辑下面代码:
注意补全头文件;
其中图片路径直接放在home目录下

源码:

#include 
#include 
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;
}
  • 保存并编译:
gcc test.cpp -o test `pkg-config --cflags --libs opencv`

【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第23张图片

gcc编译器:gcc +文件名+ -o+输出文件流名称 +` 支持包

  • 运行
./test

【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第24张图片

(三)树莓派3B+下安装opencv3.4.1(与第二步骤类似)

  • 软件源更新

sudo apt-get update

  • 所有软件更新

sudo apt-get upgrade

  • 树莓派固件更新

sudo rpi-update

  • 安装构建opencv的相关工具

sudo apt-get install build-essential cmake git pkg-config

  • 安装 jpeg 格式图像工具包

sudo apt-get install libjpeg8-dev

  • 安装 tif 格式图像工具包

sudo apt-get install libtiff5-dev

  • 安装 jasper 图像工具包

sudo apt-get install libjasper-dev

  • 安装 png 图像工具包

sudo apt-get install libpng12-dev

  • 安装视频 I/O 包,最后一个4后边是字母 “L”的小写

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev

  • 安装gtk2.0,这一步对应前边最好用清华的源,不然下载容易出错!

sudo apt-get install libgtk2.0-dev

  • 优化函数包

sudo apt-get install libatlas-base-dev gfortran

  • 下载opencv源码

wget -O opencv-3.4.1.zip https://github.com/Itseez/opencv/archive/3.4.1.zip

  • 解压opencv源码

unzip opencv-3.4.1.zip

  • 下载opencv_contrib源码
 wget -O opencv_contrib-3.4.1.zip https://github.com/Itseez/opencv_contrib/archive/3.4.1.zip
  • 解压opencv_contrib源码

unzip opencv_contrib-3.4.1.zip

  • 找到下载的文件夹,可以右键选择终端打开,也可以直接在终端下输入命令

cd opencv-3.4.1

  • 新建一个名为release文件夹

mkdir release

  • 进入此文件夹

cd release

在这里插入图片描述

  • 设置cmake编译参数(仔细一点,别敲错哦~)
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.4.1/modules \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D BUILD_EXAMPLES=ON ..

【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第25张图片
【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第26张图片

  • 下面开始正式编译,这一步过程比较长(大概4个小时),不要动树莓派,不要断电,注意散热
sudo make

(4个小时/单线程;网上有多线程的方法安装,自行了解!不过树莓派3b+运行能力不如我们笔记本,多线程也容易崩,不推荐多线程吧~)

【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第27张图片
【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第28张图片

  • 下边进行编译安装,这一步时间不算太长,耐心等待
sudo make install
  • 最后更新动态链接库(第二个单词首字母是小写L)
sudo ldconfig

这里opencv就编译安装完成了!

3.3编写程序:(与linux一致要注意头文件opencv2/opencv)
3.3.1基于 C++ 编程(编写步骤与上述2.3类似)
创建opencv_test.cpp文件
【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第29张图片
编译:(lena.jpg与opencv_test.cpp处于同一目录下)

g++ opencv_test1.cpp -o opencv_test1 -L/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -loencv_imgcodecs

【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第30张图片
运行:

./opencv_test

【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第31张图片
3.3.2基于Python编程

  • 安装python,树莓派已安装:
    在这里插入图片描述
  • 在/home/pi/opencv_test/test1_lena目录下新建lena.py

一定加上“.py”系统会默认为python文件

  • 双击打开lena.py文件添加代码

源码

import cv2 as cv
import math
src=cv.imread('lena.jpg')
cv.imshow('lena', src)
scale=-3
cv.namedWindow('lena_huidu', cv.WINDOW_AUTOSIZE)
s=src.shape
for i in range(s[1]):
       for j in range(s[0]):
            dx=(j-s[0]/2)/(s[0]/2)
            dy=(i-s[1]/2)/(s[1]/2)
            weight=math.exp((dx*dx+dy*dy)*scale)
            ptr = src[j,i]
            ptr[0] =ptr[0]*weight
            ptr[1] = ptr[1]*weight
            ptr[2] = ptr[2]*weight
cv.imshow('lena_huidu', src)
cv.waitKey(0)
cv.destroyAllWindows()
  • 运行

lena.jpg和lena.py文件放在同一文件夹下
【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程_第32张图片

大功告成!

你可能感兴趣的:(嵌入式,嵌入式开发学习)