文章目录
- 前言
- 一、烧入镜像
- 二、编译项目
- 1.创建项目文件
- 三、移植
- 四、运行文件
- 五、总结
前言
硬件:瑞芯微Rv1106【Luckfox Pro\Max Pico、网线一根、USB线、串口助手、摄像头
软件:ubuntu 20.4
编译器:arm-rockchip830-linux-uclibcgnueabihf
opencv包:本文主要是使用nihui
开发板使用镜像:buildroot
一、烧入镜像
具体烧入方法
1.打开SocToolKit.exe工具、并且选择RV1106芯片
2.首先先按着板子的boot按键
3.再用usb连接好电脑和开发板【遇到过不能传输的情况,检查usb线是不是只有充电,而不能传输数据】
4.等软件识别到板子之后,把对应的镜像文件烧入
二、编译项目
1.创建项目文件
代码如下
set(CMAKE_C_COMPILER "/home/wj/toolchain/Linux/RV1106/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-gcc")
set(CMAKE_CXX_COMPILER "/home/wj/toolchain/Linux/RV1106/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-g++")
project(opencv-mobile-test)
cmake_minimum_required(VERSION 3.5)
set(CMAKE_CXX_STANDARD 11)
set(OpenCV_DIR "${CMAKE_CURRENT_SOURCE_DIR}/opencv-mobile-4.8.1-luckfox-pico/lib/cmake/opencv4")
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(opencv-mobile-test main.cpp)
target_link_libraries(opencv-mobile-test ${OpenCV_LIBS})
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <unistd.h> // sleep()
int main()
{
cv::VideoCapture cap;
cap.set(cv::CAP_PROP_FRAME_WIDTH, 320);
cap.set(cv::CAP_PROP_FRAME_HEIGHT, 240);
cap.open(0);
const int w = cap.get(cv::CAP_PROP_FRAME_WIDTH);
const int h = cap.get(cv::CAP_PROP_FRAME_HEIGHT);
fprintf(stderr, "%d x %d\n", w, h);
cv::Mat bgr[9];
for (int i = 0; i < 9; i++)
{
cap >> bgr[i];
sleep(1);
}
cap.release();
// combine into big image
{
cv::Mat out(h * 3, w * 3, CV_8UC3);
bgr[0].copyTo(out(cv::Rect(0, 0, w, h)));
bgr[1].copyTo(out(cv::Rect(w, 0, w, h)));
bgr[2].copyTo(out(cv::Rect(w * 2, 0, w, h)));
bgr[3].copyTo(out(cv::Rect(0, h, w, h)));
bgr[4].copyTo(out(cv::Rect(w, h, w, h)));
bgr[5].copyTo(out(cv::Rect(w * 2, h, w, h)));
bgr[6].copyTo(out(cv::Rect(0, h * 2, w, h)));
bgr[7].copyTo(out(cv::Rect(w, h * 2, w, h)));
bgr[8].copyTo(out(cv::Rect(w * 2, h * 2, w, h)));
cv::imwrite("out.jpg", out);
}
return 0;
}
编译完成之后会出现一个可执行文件:
三、移植
将网线连接开发板,并且确保开发板和本地电脑ubuntu处于同一网段内,我的
在电脑ubantu上使用scp传输编译处理的可执行文件opencv-mobile-test
sudo scp -r opencv-mobile-test/ root@192.168.104.114:/root/
可能会遇到的报错:Permission denied (publickey).lost connection
解决办法:sudo vi /etc/ssh/sshd_config
传输成功之后,板子上首先进入root权限 su root,输入账号root,密码root。
进入到root/目录,然后将摄像头插在板子上【注意连接处不要插反】。
四、运行文件
1.开发板连接摄像头后上电,启动后释放摄像头资源:
killall rkipc
2.运行程序
./opencv-mobile-test
可能遇到的问题:【镜像如果不是我上面的,应该有问题,我测试了aplinelinx和ubuntu镜像,结果都是输出以下结果,使用chmod +x ./opencv-mobile-test,也不能正常加载,可能测试的时候有其他问题】
解决方法:换成我推荐的镜像文件
3.输出结果
为了很好的可视化输出结果,将out.jpg发送到本地ubuntu上,使用命令:【注意替换自己IP和地址】
scp out.jpg wj@192.168.104.118:/home/wj/Desktop
五、总结
先完成opencv的移植,后续使用rknpu去实时推理摄像头图像