环境:树莓派3B+
系统:2018-04-18-raspbian-stretch
opencv版本:2.4.9
请依次安装以下依赖项,这些必须安装的依赖项来自于opencv官网的说明,在多数debian系统中都可以采用这种方式进行安装。
sudo apt-get install cmake
sudo apt-get install libgtk2.0-dev
sudo apt-get install pkg-config
sudo apt-get install python-dev python-numpy
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev
sudo apt-get install libopencv-dev
用wget https://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.9/opencv-2.4.9.zip/download 这种方式下载非常慢,在win中科学上网之后再下载就很快!为了方便以后使用,于是将下载好的文件上传到了百度云,点击百度网盘下载。在树莓派用户目录下建立opencv文件夹,将下载好的文件存放到这个文件夹下(win上传文件到树莓派可以使用WinSCP客户端)。
进入opencv源代码目录,在该目录中新建一个名为release的文件夹。
cd ~/opencv/opencv-2.4.9
mkdir release
cd release
使用cmake工具在该文件夹中生成makefile文件,指定opencv的安装目录为/usr/local,opencv的源代码位于上一层目录。cmake修改后的命令如下,不修改的话,之后make会遇到好几个问题。
cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local .. -DENABLE_PRECOMPILED_HEADERS=OFF -DWITH_FFMPEG=OFF
找到opencv-2.4.9/modules/contrib/CMakeFiles/opencv_contrib.dir/flags.make
文件,删掉-Werror=address
!不删掉也会遇到问题。下面编译源代码并安装,命令如下:
make
sudo make install
sudo ldconfig # 更新搜索动态链接库
指令如下:
pkg-config --modversion opencv
目标: 通过代码载入一张图片,用opencv检测图片边缘,并把原图和边缘检测的图片输出到屏幕中。
说明: makefile中通过pkg-config --cflags opencv 获得opencv相关头文件路径,通过pkg-config --libs opencv获得opencv扩展库。
实际操作: 我的test.cpp文件和makefile文件创建在~/Desktop目录,进入该目录下执行以下命令就OK了。
make
./test image.jpg
源代码:
test.cpp
#include
#include
#include
#include
using namespace cv;
using namespace std;
int main (int argc, char **argv)
{
Mat image_src, image_gray, image_edge;
image_src = imread(argv[1], CV_LOAD_IMAGE_COLOR );
if (argc != 2 || !image_src.data) {
cout << "No image data\n";
return -1;
}
cvtColor(image_src, image_gray, CV_RGB2GRAY); //将原图转为灰度图
blur(image_gray, image_edge, Size(3, 3)); //使用3*3内核来降噪
Canny(image_edge, image_edge, 10, 30, 3); //运行Canny算子
imshow("image", image_src);
imshow("edge", image_edge);
waitKey(0);
return 0;
}
makefile
INCLUDE = $(shell pkg-config --cflags opencv)
LIBS = $(shell pkg-config --libs opencv)
SOURCES = test.cpp
# 目标文件
OBJECTS = $(SOURCES:.cpp=.o)
# 可执行文件
TARGET = test
$(TARGET):$(OBJECTS)
g++ -o $(TARGET) $(OBJECTS) -I $(INCLUDE) $(LIBS)
$(OBJECTS):$(SOURCES)
g++ -c $(SOURCES)
clean:
rm $(OBJECTS) $(TARGET)
# 编译规则 $@代表目标文件 $< 代表第一个依赖文件
%.o:%.cpp
g++ -I $(INCLUDE) -o $@ -c $<
参考网址: https://blog.csdn.net/xukai871105/article/details/40988101