Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Android二进制文件使用openCV矩阵裁剪图像_Android_Opencv - Fatal编程技术网

使用Android二进制文件使用openCV矩阵裁剪图像

使用Android二进制文件使用openCV矩阵裁剪图像,android,opencv,Android,Opencv,我在使用Android OpenCV二进制文件裁剪图像时遇到了问题 这就是我试图裁剪图像左上象限的操作: Initialization { mYuv = new Mat(mFrameSize.height + mFrameSize.height / 2, mFrameSize.width, CvType.CV_8UC1); mGraySubmat = mYuv.submat(0, mFrameSize.height, 0, mFrameSize.width); } proce

我在使用Android OpenCV二进制文件裁剪图像时遇到了问题

这就是我试图裁剪图像左上象限的操作:

Initialization {
    mYuv = new Mat(mFrameSize.height + mFrameSize.height / 2, mFrameSize.width, CvType.CV_8UC1);
    mGraySubmat = mYuv.submat(0, mFrameSize.height, 0, mFrameSize.width);
}


processFrame(byte[] data) {
   mYuv.put(0, 0, data);
   Imgproc.cvtColor(mGraySubmat, mRgba, Imgproc.COLOR_GRAY2BGR, 4);
   bmp = Bitmap.createBitmap(mFrameSize.width/2, mFrameSize.height/2, Bitmap.Config.ARGB_8888);
   Rect roi = new Rect(0,0,mFrameSize.width/2,mFrameSize.height/2);
   Mat faceMat = new Mat(mRgba,roi);
   Utils.matToBitmap(faceMat.clone(), bmp);       
}

我得到的是一幅乱七八糟的图像。我也看到过其他帖子说我在做什么,但它不起作用。实际上,图像看起来像是在那里,但也有一些阴影图像比例失调

我可以手动执行此操作,并且它可以在文件中工作-请参见下文。我做错什么了吗

processFrame(byte[] data) {

     for (int i = 0; i < frameSize; i++) {
     int y = (0xff & ((int) data[i]));
     rgba[i] = 0xff000000 + (y << 16) + (y << 8) + y;
}
// Example of cropping the upper left corder
bmp = Bitmap.createBitmap(mFrameSize.width/2, mFrameSize.height/2, Bitmap.Config.RGB_565);
bmp.setPixels(rgba, 0/* offset */, mFrameSize.width /* stride */, 0, 0, mFrameSize.width/2, mFrameSize.height/2);
processFrame(字节[]数据){
对于(int i=0;iImgproc.COLOR\u GRAY2BGR
转换。如果您想要彩色图像,则需要使用选项二:

Imgproc.cvtColor(mYuv, mRgba, Imgproc.COLOR_YUV420sp2RGB, 4);
您不需要MGRAYSUMBAT

如果您需要灰度图像,则第一种选择更好:

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

后一种选择截断了a
YCbCr_420_SP(NV21)的色度分量
格式化图像。

这两个源不具有可比性,因为您在第一个源中没有使用数据。无论如何,位图和数据的类型应该匹配。很抱歉,我添加了缺少的片段。我已经对您的问题进行了投票,因为在修改代码后我找不到有效的解决方案。我使用了Imgproc.COLOR\u YUV420sp2RGB和Imgproc.COLOR\u YUV420sp2RGB分别成功地用于彩色灰度。只要我不尝试裁剪图像,它们都能完全按照预期工作。只有当我使用Mat faceMat=new Mat(mRgba,roi)来裁剪图像时,问题才会出现。这时会出现扭曲