Java Android中的位图和OpenCV中的Mat

Java Android中的位图和OpenCV中的Mat,java,android,c++,opencv,bitmap,Java,Android,C++,Opencv,Bitmap,我在OpenCV C++中有以下代码: #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> using namespace cv; int main(){ Mat src = imread("image.jpg"); if (src.empty()) return -1; pyrMeanShiftFiltering(src,s

我在OpenCV C++中有以下代码:

#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;

int main(){
    Mat src = imread("image.jpg");
    if (src.empty())
        return -1;
    pyrMeanShiftFiltering(src,src,10,20,1);
    imshow("src", src);
    waitKey(0);
    return 0;
}
现在我想让我的代码在Android上运行,所以我替换了这一行:

case VIEW_MODE_GRAY:
    Imgproc.cvtColor(mGraySubmat, mRgba, Imgproc.COLOR_GRAY2RGBA, 4);
    break;
为此:

case VIEW_MODE_GRAY:
    Imgproc.cvtColor(mGraySubmat, mRgba, Imgproc.COLOR_GRAY2RGBA, 4);
    Imgproc.pyrMeanShiftFiltering(mRgba,mRgba,10,20);
    break;
但我明白了:

10-20 11:08:45.929: I/Sample::Activity(12846): Menu Item selected Preview GRAY
10-20 11:08:46.049: W/dalvikvm(12846): threadid=9: thread exiting with uncaught exception (group=0x4013a560)
10-20 11:08:46.059: E/AndroidRuntime(12846): FATAL EXCEPTION: Thread-10
10-20 11:08:46.059: E/AndroidRuntime(12846): CvException [org.opencv.core.CvException: ..\..\modules\imgproc\src\segmentation.cpp:345: error: (-210) Only 8-bit, 3-channel images are supported in function void cvPyrMeanShiftFiltering(const CvArr*, CvArr*, double, double, int, CvTermCriteria)
10-20 11:08:46.059: E/AndroidRuntime(12846): ]
10-20 11:08:46.059: E/AndroidRuntime(12846):    at org.opencv.imgproc.Imgproc.pyrMeanShiftFiltering_1(Native Method)
10-20 11:08:46.059: E/AndroidRuntime(12846):    at org.opencv.imgproc.Imgproc.pyrMeanShiftFiltering(Imgproc.java:7247)
10-20 11:08:46.059: E/AndroidRuntime(12846):    at com.duckie.a.Sample1View.processFrame(Sample1View.java:80)
10-20 11:08:46.059: E/AndroidRuntime(12846):    at com.duckie.a.SampleViewBase.run(SampleViewBase.java:185)
10-20 11:08:46.059: E/AndroidRuntime(12846):    at java.lang.Thread.run(Thread.java:1019)

有什么问题吗?如何让我的代码在Android中工作?而且,我如何在没有延迟的情况下完成此操作?

似乎cvPyrMeanShiftFiltering需要一个3通道映像,而您生成的4通道映像具有:

Imgproc.cvtColor(mGraySubmat, mRgba, Imgproc.COLOR_GRAY2RGBA, 4);

所以我试着把它改成Imgproc.COLOR\u GRAY2RGB,它可以工作,但是非常延迟。你知道为什么吗?延误太大了。我该怎么处理呢?可能是因为过滤太重或者你的图像太大了。
Imgproc.cvtColor(mGraySubmat, mRgba, Imgproc.COLOR_GRAY2RGBA, 4);