相关疑难解决方法(0)

是否可以将位图切成小块而不将整个内容加载到内存中?

我正在开发一款适用于Android的图像处理应用程序,可识别音乐表中的音乐符号.

我尝试使用BitmapFactory.decodeFile(imgPath)方法将整个图像加载到Bitmap中,但由于我的手机没有足够的内存,因此出现"VM堆大小"错误.为了解决这个问题,我想将整个图像切成小块,但我不知道该怎么做.

我还看到可以通过使用BitmapFactory.Option类的inSampleSize属性来减少Bitmap的内存大小,但如果我这样做,我将无法获得音乐符号识别过程所需的高分辨率图像.

无论如何都可以在不去NDK的情况下处理这个问题?

android image-processing out-of-memory

19
推荐指数
2
解决办法
7631
查看次数

从编码图像和视频中提取DCT系数

有没有办法从编码图像和视频中轻松提取DCT系数(和量化参数)?任何解码器软件都必须使用它们来解码块DCT编码的图像和视频.所以我很确定解码器知道它们是什么.有没有办法将它们暴露给使用解码器的人?

我正在实施一些直接在DCT域中工作的视频质量评估算法.目前,我的大部分代码都使用OpenCV,因此如果有人知道使用该框架的解决方案,那将会很棒.我不介意使用其他库(也许是libjpeg,但这似乎只适用于静止图像),但我主要担心的是尽可能少地执行格式化工作(我不想重新发明轮子并写入我自己的解码器).我希望能够打开OpenCV可以打开的任何视频/图像(H.264,MPEG,JPEG等),如果它是块DCT编码,则可以获得DCT系数.

在最坏的情况下,我知道我可以编写自己的块DCT代码,通过它运行解压缩的帧/图像,然后我将回到DCT域.这不是一个优雅的解决方案,我希望我能做得更好.

目前,我使用相当常见的OpenCV样板来打开图像:

IplImage *image = cvLoadImage(filename);
// Run quality assessment metric
Run Code Online (Sandbox Code Playgroud)

我用于视频的代码同样微不足道:

CvCapture *capture = cvCaptureFromAVI(filename);    
while (cvGrabFrame(capture))
{
    IplImage *frame = cvRetrieveFrame(capture);
    // Run quality assessment metric on frame
}
cvReleaseCapture(&capture);
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我都获得了IplImageBGR格式的3通道.有什么方法可以得到DCT系数吗?

opencv image-processing video-processing dct

17
推荐指数
1
解决办法
2万
查看次数