export LD_LIBRARY_PATH=/usr/local/lib (这个路径按实际情况来)
不管挂载在哪里都 只要设置环境变量~~~~~~ LD_LIBRARY_PATH不知道这个是什么 居然能这样哈!~~~~
http://xilinx.eetrend.com/blog/6755Zedboard--Opencv移植和Zedboard测试(十一)
参考了这个
/2015--3--20确认完成 rainsky的(四)和(五)
和在pc机上一样,建立 文件夹/opt/zedboard/opencv_zed,复制文件进来,解压缩:建立两个文件夹 build、 install,如下图我是在/opt/zedboard/opencv_zed/OpenCV-2.4.3 大写O 里面建立了 build install 而不是小写的o
在这里和pc不太一样了,需要设置编译环境,在opencv-2.4.4下面新建一个文件,文件名为toolchain.cmake,里面的内容为:我是在/opt/zedboard/opencv_zed/OpenCV-2.4.3 里面建立了这个文件 (大写O)
新建一个专门写程序的文件夹 mkdir /opt/zedboard/opencv_zed/code
这里我有个程序"1234" 为了zed+opencv+qt +显示图片
配置完成后就输入make开始编译,编译完成后就是make install安装啦。安装完成后在install的文件夹里就是运行库啦。
这句话的意思是 在build里面 make make install (我有没有这么做 记不得了... )
/opt/zedboard/opencv_zed/opencv-2.4.3/install/bin 确认在这里(小写o啊!!!) 里面的 bin文件夹里面 都是 arm架构的 文件!!!!!
/opt/zedboard/opencv_zed/opencv-2.4.3/build 这里面什么都没有!! 因为build 我实际建在了 大写O里面!!!
/opt/zedboard/opencv_zed/opencv-2.4.3/install 这里里面 应该就是 我运行ZED时候要挂载opencv镜像的目录!!!!!
不对 是要挂载在/usr/local/????
注释:我在PC上linux上 opencv要用的运行库 是在 /usr/local/里面 其中的 bin文件夹里面都是X86架构的文件!!!!
arm-xilinx-linux-gnueabi-g++ -I /opt/zedboard/opencv_zed/opencv-2.4.4/install/include -I/opt/zedboard/opencv_zed/opencv-2.4.4/install/include/opencv -L/opt/zedboard/opencv_zed/opencv-2.4.4/install/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann ./edge_detection.cpp -o ./edge_detection.o
我用opencv2 rainsky用opencv1 所以我得加2 -I/opt/zedboard/opencv_zed/opencv-2.4.4/install/include/opencv 在opencv后面加2
-I (就是include的意思)和 -L(就是链接库的意思)我后面都跟了空格 他没有空格!!
链接库正确吗???
-lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann
这段代码 应该是opencv1时代的 这时候 应该不能用 ???????这些都表示什么含义呢????????
先试试!!!!
甚至不用显示 直接在zed上做图片变换 再保存 在到电脑上看效果!!!
这才是正确的实录啊!!!!
OpenCV Error: Unspecified error (The function is not implemented. Rebuild the library with Window2
terminate called after throwing an instance of 'cv::Exception'
what(): /opt/zedboard/opencv_zed/OpenCV-2.4.3/modules/highgui/s
现在报错这个!!!!!
下面的图片解释: 挂载opencv就是挂载opencv的动态链接库 就是.so文件
我试试看不加显示 直接opencv处理保存图片 这才是正确的思路
不能用imshow函数 因为这个函数在电脑上用是调用了底层的东西
zed上没有啊
我说怎么网上都是处理图片 再保存的 例子
原来是这样!!!
export LD_LIBRARY_PATH=/usr/local/lib (这个路径按实际情况来)
不管挂载在哪里都 只要设置环境变量~~~~~~ LD_LIBRARY_PATH不知道这个是什么 居然能这样哈!~~~~
接着来吧
交叉编译上次做好的 彩图转化灰度的程序
记得要修改图片路径 和图片名称~~~~~~~~
#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> using namespace cv; int main(int argc, char *argv[]) { Mat src = imread( "/mnt/peng_jerry.jpg" ); Mat result; cvtColor(src,result,CV_BGR2GRAY); imwrite("/mnt/peng_jerry_gray.jpg",result); }
下图说明我 把opencv安装了两遍 囧----!~~~~
下图是我在交叉编译彩转灰程序
下面这个命令是正常可用的 命令解释 第一啊 /opt/zedboard/opencv_zed/opencv-2.4.3/install/include/ 是我安装opencv的其一一个地方
第二啊 opencv2 应该是-I 用 ....2.4.3/install/include/opencv2 我是这样理解的
第三 -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann 这个我也不知道是啥?????
arm-xilinx-linux-gnueabi-g++ -I /opt/zedboard/opencv_zed/opencv-2.4.3/install/include/ -I /opt/zedboard/opencv_zed/opencv-2.4.3/install/include/opencv2 -L /opt/zedboard/opencv_zed/opencv-2.4.3/install/lib/ -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann ./test_zed_opencv_gray.cpp -o ./test_zed_opencv_gray.o
运行时 报错!!!
OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cvtColor, file /opt/zedboard/opencv_zed/OpenCV-2.4.3/modules/imgproc/src/color.cpp, li6
terminate called after throwing an instance of 'cv::Exception'
参考这个!!
第一解决思路
原因是你没有给你自己的Mat rgbMat = new Mat();
分配大小导致的。
可是如果是内存问题那我在电脑上没问题啊!!!?????
后再来证明这个想法也不对!!
第二解决思路 这个想法完全不对 因为前后的图像通道都不一样!!!!
实际上不支持 jpg格式的图像
imread 和 imwrite 都不能用这个格式!!!!!!
改成了bmp格式 立马好啦!!!@!
最后的程序
#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <stdio.h> using namespace cv; int main(int argc, char *argv[]) { // Mat src = imread( "/mnt/peng_jerry.jpg" ); Mat src(640,480,CV_8UC3,Scalar(120,120,140)); printf("cols = %d\n",src.cols); // if(src == 0){ // printf( "Unable to load the image\n" ); // return -1; // } // Mat result; Mat dst(src.size(),CV_8UC1); cvtColor(src,dst,CV_BGR2GRAY); imwrite("/mnt/peng_jerry_gray.bmp",dst); return 0;
如果是imwrite用jpg格式 会在PC上没事 在ZED上不行!!!
因为我之前做的的opencv镜像不支持jpg格式