1、到openCV官网下载SDK:https://opencv.org/releases,获取opencv-4.8.0-android-sdk.zip文件,并解压
2、新建Android工程,加载SDK
File -> New -> Import Module -> 选择解压后的sdk子目录 -> Finish
3、如果使用Java言语工程,会报错,新版本CV SDK默认是使用kotlin语言的,将build.gradle中
apply plugin: 'kotlin-android' 删除即可
4、配置API版本,可根据构建的工程来配置,找到app下的build.gradle查看修改即可,并同步下工程
5、在build.gradle添加依赖项声明
最后同步一下,完事儿,接下来就是驾驭openCV了
// 实现将视频帧从RGB格式转换为YUV格式,并将转换后的数据写入到一个输出文件中
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.videoio.VideoCapture;
import org.opencv.videoio.Videoio;
import org.opencv.imgproc.Imgproc;
import java.io.FileOutputStream;
import java.io.IOException;
private void processVideo(String videoPath, String outputPath) {
VideoCapture videoCapture = new VideoCapture(videoPath);
if (!videoCapture.isOpened()) {
// 处理无法打开视频的情况
return;
}
Mat frame = new Mat();
Mat yuvMat = new Mat();
Mat brightenedFrame = new Mat();
// 视频宽度和高度
double width = videoCapture.get(Videoio.CAP_PROP_FRAME_WIDTH);
double height = videoCapture.get(Videoio.CAP_PROP_FRAME_HEIGHT);
// 创建用于保存 YUV 数据的 Mat 对象
Mat yuvOutputMat = new Mat((int) (height + height / 2), (int) width, CvType.CV_8UC1);
// 创建文件输出流
FileOutputStream fos = null;
try {
fos = new FileOutputStream(outputPath);
while (videoCapture.read(frame)) {
// 调整亮度
double alpha = 1.0; // 对比度控制
double beta = -18.0; // 亮度控制
frame.convertTo(brightenedFrame, -1, alpha, beta);
// 将 RGB 格式的帧转换为 YUV 格式
Imgproc.cvtColor(brightenedFrame, yuvMat, Imgproc.COLOR_RGB2YUV_I420);
// 将 YUV 数据保存到文件
byte[] yuvData = new byte[(int) (yuvMat.total() * yuvMat.channels())];
yuvMat.get(0, 0, yuvData);
yuvOutputMat.put(0, 0, yuvData);
fos.write(yuvData);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
// 释放资源
try {
if (fos != null) {
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
videoCapture.release();
frame.release();
yuvMat.release();
yuvOutputMat.release();
}
}