问题描述
我正在尝试使用Android中JavaCV的FFmpegFrameGrabber从视频中提取帧并获取每个帧的平均颜色。我的输出为我提供了所有帧相同的颜色,考虑到我正在处理的视频类型,情况则不会如此。我不能说为什么我在 avgColorArr 中获得所有相同的颜色。请帮我解决这个问题。
private ArrayList<Bitmap> getFrames(){
try {
String path = "/storage/emulated/0/pulse.mp4";
InputStream inputStream = new FileInputStream(path);
ArrayList<Bitmap> bitmapArray = new ArrayList<>();
bitmapArray.clear();
FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(path);
AndroidFrameConverter converterToBitMap = new AndroidFrameConverter();
grabber.start();
int count = 0;
Frame frame;
while(true){
frame = grabber.grabFrame();
if (frame == null) {
break;
}
if (frame.image == null) {
continue;
}
count++;
Log.i("frame","loop number" + count);
Bitmap bitmap = converterToBitMap.convert(frame);
bitmapArray.add(bitmap);
}
return bitmapArray;
} catch(Exception e) {
Log.e("frame error: ",e.toString());
System.out.println(e.toString());
}
return null;
}
对于平均颜色
private ArrayList<Integer> getAverageColorArray(){
ArrayList<Bitmap> bitmapArrayList = getFrames();
ArrayList<Integer> avgColorArr = new ArrayList<Integer>();
long redBucket = 0;
long greenBucket = 0;
long blueBucket = 0;
long pixelCount = 0;
for(Bitmap b: bitmapArrayList){
for (int y = 0; y < b.getHeight(); y++) {
for (int x = 0; x < b.getWidth(); x++) {
int c = b.getPixel(x,y);
pixelCount++;
redBucket += Color.red(c);
greenBucket += Color.green(c);
blueBucket += Color.blue(c);
}
}
int red = (int)(redBucket / pixelCount);
int green = (int)(greenBucket / pixelCount);
int blue = (int)(blueBucket / pixelCount);
int avgColor = Color.rgb(red,green,blue);
avgColorArr.add(avgColor);
}
return avgColorArr;
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)