我正在开发一款适用于Android的图像处理应用程序,可识别音乐表中的音乐符号.
我尝试使用BitmapFactory.decodeFile(imgPath)方法将整个图像加载到Bitmap中,但由于我的手机没有足够的内存,因此出现"VM堆大小"错误.为了解决这个问题,我想将整个图像切成小块,但我不知道该怎么做.
我还看到可以通过使用BitmapFactory.Option类的inSampleSize属性来减少Bitmap的内存大小,但如果我这样做,我将无法获得音乐符号识别过程所需的高分辨率图像.
无论如何都可以在不去NDK的情况下处理这个问题?
有没有办法从编码图像和视频中轻松提取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系数吗?