当前位置: 首页 > news >正文

做问卷调查的网站章丘网站建设公司

做问卷调查的网站,章丘网站建设公司,网站后台管理系统制作,免费网站网站制作平台一、opencv 交叉编译没有 ffmpeg ,会导致视频打不开 在交叉编译时候,发现在 pc 端能用 opencv 打开的视频,但是在 rv1126 上打不开。在网上查了很久,原因可能是 交叉编译过程 ffmpeg 造成的。之前 ffmpeg 是直接用 apt 安装的&am…

一、opencv 交叉编译没有 ffmpeg ,会导致视频打不开

在交叉编译时候,发现在 pc 端能用 opencv 打开的视频,但是在 rv1126 上打不开。在网上查了很久,原因可能是 交叉编译过程 ffmpeg 造成的。之前 ffmpeg 是直接用 apt 安装的,opencv 编译也是直接用 Cmake 命令行进行的。

网上特别推荐用命令行进行编译,但是本次交叉编译,我发现使用 CMake-gui 进行编译,能更好地找出错误,因为不管是警告还是错误,CMake-gui 都会用红字来表示。

解决opencv源代码编译找不到ffmpeg-CSDN博客

二、准备工作

创建一个目录:/opt/software,把 opencv4.5.5、x264、ffmpeg-4.x 都下载到该目录

再创建一个目录:/opt/out-arm,用作 x264、ffmpeg的安装目录

三、交叉编译x264

opencv交叉编译静态库,支持ffmpeg、libjpeg,实现取流及写入jpeg文件_交叉编译 生成静态库_程序员阿周的博客-CSDN博客

1、解压源码并且进入源码目录
2、编译动态库,目的是编译ffmpeg使用,命令如下:
#./configure --prefix=/opt/software/opencv --host=arm-linux --cross-prefix=arm-linux-gnueabihf- --disable-asm --enable-shared
#make -j6
#make install
3、编译静态库,目的是最后我们的应用程序链接使用,命令如下:
#./configure --prefix=/home/cxyazhou/work/opencv --host=arm-linux --cross-prefix=arm-linux-gnueabihf- --disable-asm
#make clean;make -j6
#make install

注意:静态库编译时,make install只会拷贝bin下的文件到install目录,所以这里需要手动拷贝头文件、静态库到install目录,基于上面已经编译了动态库,会自动拷贝头文件,这里我们只要拷贝静态库到install的lib目录就可以:

#cp libx264.a /opt/out-arm/lib/

四、交叉编译 ffmpeg

opencv交叉编译静态库,支持ffmpeg、libjpeg,实现取流及写入jpeg文件_交叉编译 生成静态库_程序员阿周的博客-CSDN博客

0、配置下环境变量,防止编译 ffmpeg 时候找不到 x264库

ffmpeg 编译问题记录-CSDN博客

#export PKG_CONFIG_PATH=/opt/out_arm/lib/pkgconfig/

1、解压源码并且进入源码目录
2、编译静态库,命令如下:
#./configure --cross-prefix=arm-linux-gnueabihf- --enable-cross-compile --target-os=linux --cc=arm-linux-gnueabihf-gcc --arch=arm64 --prefix=/opt/out-arm --enable-ffmpeg --disable-armv5te --disable-armv6 --disable-armv6t2 --disable-asm --enable-swscale --enable-avresample --enable-gpl --enable-libx264 --extra-cflags=-I/opt/out-arm/include --extra-ldflags=-L/opt/out-arm/lib
#make -j6
#make install

五、交叉编译 OpenCV

opencv交叉编译包含ffmpeg_交叉编译 opencv ffmepg_思而后行之的博客-CSDN博客

Configure 前工作

按照上述块引用中的博客来,另外我还通过 Add Entry 指定了安装目录:

docker 容器中 /mnt 目录 会映射整个开发板

Configure

Configure 过程中的一些 Warning 不用太在意,只要 Configure 能完成就行:

检查 Configure 结果,FFMPEG 为 YES ,欧耶:

Generate

Generate 在上面的博客中没有报错,但是我这里报错:

CMake Error in modules/videoio/CMakeLists.txt:Imported target "ocv.3rdparty.ffmpeg" includes non-existent path
"/mnt/opt/software/opencv/include"in its INTERFACE_INCLUDE_DIRECTORIES.  Possible reasons include:* The path was deleted, renamed, or moved to another location.* An install or uninstall procedure did not complete successfully.* The installation package was faulty and references files it does notprovide.

解决方法是把 x264、 ffmpeg库的安装目录下的 include 文件夹的内容 copy 过去

# copy /opt/out-arm/include/*     /mnt/opt/software/opencv/include -r

在构建目录下执行的工作

Generate 完成后,关闭 cmkae-gui,回到构建目录,执行:

# make -j8

# make install

安装完毕:

六、检查是否能打开视频

CMakLists.txt

cmake_minimum_required(VERSION 2.8.4)STRING(REGEX REPLACE ".*/(.*)" "\\1" CURRENT_FOLDER ${CMAKE_CURRENT_SOURCE_DIR} )
MESSAGE("current project: " ${CURRENT_FOLDER})set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_CROSSCOMPILING TRUE)cmake_host_system_information(RESULT arch_value QUERY OS_PLATFORM)if(NOT "${arch_value}" STREQUAL "armv7l")include ($ENV{HOME}/configs/cross.cmake)
endif()project(video_test)# 设置链接器路径
link_directories(/mnt/usr/lib/arm-linux-gnueabihf)set(CMAKE_PREFIX_PATH "/mnt/usr" ${CMAKE_PREFIX_PATH})
find_package(OpenCV REQUIRED)add_executable(video_test test.cpp )target_include_directories(video_test PUBLIC ${OpenCV_INCLUDE_DIRS} )
target_link_libraries(video_test  PRIVATE ${OpenCV_LIBS} /mnt/usr/lib/ogdi/libgdal.so)target_link_libraries(video_test PRIVATE -Wl,-rpath,/mnt/usr/lib/arm-linux-gnueabihf/)

test.cpp

#include <opencv2/opencv.hpp>
#include <iostream>
int main()
{cv::VideoWriter outputVideo("/userdata/result.mp4",cv::VideoWriter::fourcc('m', 'p', '4', 'v'),double(1000/30),cv::Size(640,480));//    int camera_id =0;std::string video_path = "/userdata/test.avi";cv::VideoCapture camera(video_path);if(!camera.isOpened()){printf("camera %s cann't open\n", video_path.c_str());return 1;}elseprintf("camra %s opened\n", video_path.c_str());int frame_num = camera.get(cv::CAP_PROP_FRAME_COUNT);int frame=0;cv::Mat img;while(1){frame +=1;camera >> img;if (img.empty()){printf("camera cann't get image!\n");}//        cv::imshow("result", img);outputVideo.write(img);if(frame == frame_num - 2) break;}camera.release();outputVideo.release();return 0;
}

交叉编译的可执行文件,video_test 可以在开发板上打开视频文件:

七、其他

在编译和安装源代码时,常常会使用 pkg-config 工具来帮助 CMake 在构建过程中找到所需的库和头文件路径。pkg-config 是一个用于管理编译时和运行时依赖关系的工具,它提供了一个标准的接口来查询所需库的相关信息。

当安装一个库时,通常会将库的元数据信息(如库路径、版本号、依赖关系等)保存在对应的 .pc 文件中,并将该文件安装到系统的 pkg-config 目录中。pkg-config 目录是一个包含所有项目所需的 .pc 文件的目录,CMake 可以通过查询这些文件来获取库的信息。

在 CMake 中,可以使用 find_package 命令来查找并配置依赖库的设置。当传递库的名称给 find_package ,CMake 将通过 pkg-config 查询相应的库信息,并将结果存储在变量中,例如:

find_package(OpenCV REQUIRED)

上述代码中,find_package(OpenCV REQUIRED) 将在 pkg-config 目录中查找名为 opencv.pc 的文件,并从中提取出 OpenCV 库的信息,包括库的路径、版本号和所需的其他依赖关系。然后,CMake 将使用这些信息来配置 OpenCV 库的设置,以便在构建过程中可以找到和链接 OpenCV。

需要注意的是,并非所有的库都使用 pkg-config 进行管理和配置。有些库可能使用其他方式来提供编译和运行时的元数据信息,例如 CMake 配置文件或环境变量。因此,在使用特定库时,应查阅该库的文档或官方指南,以了解正确的配置方法。

http://www.yayakq.cn/news/59534/

相关文章:

  • 深远互动 网站建设网站开发 访问速度慢
  • 网站开发英语自己家的电脑做网站需要备案没
  • l临沂建设工程信息网站百赞小程序制作平台
  • 销售网站开发与设计现状上海网站建设服务站霸网络
  • 榆林建设银行的网站深圳网站建设潮动九州
  • wordpress站外链接深圳燃气公司服务电话
  • 个人建站的app哪里有卖濮阳建设银行官方网站
  • 电子政务建设网站图片魔方网站
  • 虚拟网站怎么做的中国建设银行金华分行网站
  • 2017电商网站建设背景南京网络公司排名
  • 个人网站备案入口深圳地图各区分布图
  • 陕西省工程建设交易服务中心网站南昌网站开发商哪家强
  • 群晖ds216j能否做网站seo网站推广的目的包括哪个方面
  • 网站开发文档管理工具辽宁城乡建设部网站
  • 广东建设部官方网站做网站用的三角形图片
  • 机关网站建设 方案求推荐好的网站建设平台
  • 建设仿优酷视频网站微网站制作提供商推荐
  • 网站建设的收入来源网站建设要如何选择
  • 建设网站分几个步骤网络营销案例事件
  • wordpress开启多站点模式东莞市建设局质量监督网站
  • 湖南城乡建设厅官方网站wordpress的平台
  • 上海建设银行网站上班时间表西地那非最佳起效时间
  • 上百度推广的网站要多少钱注册一个公司需要多少钱?
  • 亚马逊建站服务旅游网站开发指导
  • 学校网站建设客户需求调查问卷安徽网站设计流程
  • 网站地图提交地址网站建设开题报告ppt
  • seo网站优化案例长沙网络营销 公司
  • 怎样自己做企业的网站北京标识设计制作公司
  • 集团公司网站建设策划方案wordpress 登录密码验证
  • 网站301重定向怎么做网站开发框架具体使用方法