在ffmpeg.c中使用包含opencv的so库

新建一个引用opencv的so工程

新建的测试工程,仅仅是通过输入一个图像路径,显示出来

use_opencv.h文件如下

#ifndef __HEADER_H__
#define __HEADER_H__

#ifdef __IMPORT_FUNC__
extern "C" {
void test_opencv(char* img_path);
}
#else
void test_opencv(char* img_path);
#endif

#endif

use_opencv.cpp文件如下

#include <iostream>
using namespace std;
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/types_c.h>
using namespace cv;//使用命名空间

#define __IMPORT_FUNC__
#include "use_opencv.h"


void test_opencv(char* img_path)
{
	cout << "hello opencv2222." << endl;

	Mat img = imread(img_path, 0); // 读取图片 这里文件地址写成你想打开的文件的地址或者放在执行目录里就不用写路径直接使用文件名字
	imshow("load image",img);//在窗口中打开图片
	waitKey(100000);//等待时间,这里等待时间最好别填零,要不打开的窗口秒退
}

int main()
{
	char *img_path = "/home/zeng/ffmpeg/ffmpeg-4.2.2/1.jpg";
	test_opencv(img_path);

	return 0;
}

生成.so库中的测试例子

用下面的命令先生成测试二进制文件

g++ use_opencv.cpp -o use_opencv -I/usr/local/include/ -I/usr/lcoal/include/opencv -I/usr/local/include/opencv2 -L/usr/local/lib/ -lopencv_imgproc -lopencv_highgui -lopencv_core -lopencv_imgcodecs

运行这个二进制文件,如果成功,在继续

在这里插入图片描述

生成.so库

再用如下的命令生成一个.so库

g++ use_opencv.cpp -shared -o libuse_opencv.so -O0 -fPIC -g3 -Wall -I/usr/local/include/ -I/usr/lcoal/include/opencv -I/usr/local/include/opencv2 -L/usr/local/lib/ -lopencv_imgproc -lopencv_highgui -lopencv_core -lopencv_imgcodecs

这就是生成的.so库

在这里插入图片描述

用nm命令查看是否导出了函数

用如下命令查看.so库是否导出了对应的函数test_opencv

nm -D libuse_opencv.so |grep test_opencv

可以看到对应的函数已经导出,前面是T的

在这里插入图片描述

在测试工程.c文件中引入这个.so库

新建一个项目,在main函数中调用这个.so库中的test_opencv函数

test_ffmpeg.c代码如下

#include <stdio.h>
#include <stdlib.h>

#include "use_opencv.h"

int main(void) {
	puts("!!!Hello World2!!!"); /* prints !!!Hello World!!! */

	char *img_path = "/home/zeng/ffmpeg/ffmpeg-4.2.2/1.jpg";
	test_opencv(img_path);

	return EXIT_SUCCESS;
}

准备工作

拷贝use_opencv.h到/usr/local/include中

sudo cp use_opencv.h /usr/local/include/

拷贝libuse_opencv.so到/usr/local/lib中

sudo cp libuse_opencv.so /usr/local/lib/

在这里插入图片描述

编译测试

使用如下命令,编译test_ffmpeg.c,得到二进制文件test_ffmpeg

gcc test_ffmpeg.c -o test_ffmpeg -I/usr/local/include/ -L/usr/local/lib/ -luse_opencv

执行这个测试用的二进制文件,也可以看到效果

在这里插入图片描述

在ffmpeg.c中引入这个so库

准备工作

打开ffmpeg.c,加入使用的部分代码

在这里插入图片描述

修改fftools下的Makefile,加入如下两行

$$(OBJS-$(1)): CFLAGS  += -I/usr/local/include
$(1)$(PROGSSUF)_g$(EXESUF): FF_EXTRALIBS += -luse_opencv

在这里插入图片描述

测试使用

对ffmpeg项目进行配置,生成ffmpeg.c

./configure --enable-gpl --enable-nonfree --enable-pthreads --extra-cflags=-g --extra-cflags=-O0 --extra-libs=-lstdc++ --extra-cxxflags=-g --extra-cxxflags=-O0 --extra-cxxflags=-fpermissive --enable-debug=3 --disable-optimizations --disable-stripping --enable-libx264 --disable-doc --disable-htmlpages --disable-ffplay --disable-ffprobe

生成ffmpeg之后,使用如下命令调用ffmpeg

ffmpeg -i input.mp4 -vcodec h264 -max_muxing_queue_size 1024 out.mp4

可以看到结果如下,说明.so库已经可以使用

在这里插入图片描述

用ldd查看一下生成的ffmpeg也可以看到依赖了对应的so库

在这里插入图片描述

参考链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值