我在android上尝试过按位异或,但我得到了以下错误:
04-11 00:25:47.404: E/cv::error()(7370): OpenCV Error: Sizes of input arguments do not match (The operation is neither 'array op array' (where arrays have the same size and type), nor 'array op scalar', nor 'scalar op array') in void cv::binary_op(cv::InputArray, cv::InputArray, cv::OutputArray, cv::InputArray, void (* const*)(const uchar*, size_t, const uchar*, size_t, uchar*, size_t, cv::Size, void*), bool), file /home/reports/ci/slave/50-SDK/opencv/modules/core/src/arithm.cpp, line 1021
下面是我的代码:
Mat temp1 = mRgba.submat(roi);
Mat temp2 = Mat.zeros(temp1.size(), CvType.CV_8UC1);
Core.bitwise_xor(temp1, temp2, temp1);
我还尝试过用以下方法示例化temp1和temp2:
Mat temp1 = new Mat(height, width, CvType.CV_8UC1);
Mat temp2 = new Mat(height, width, CvType.CV_8UC1);
但还是同样的错误..
2条答案
按热度按时间jdgnovmf1#
您的代码没有提到
mRgba
的类型,但从名称来看,我假设它是RGBA或CV_8UC4
,这意味着temp1
将与mRgba
具有相同的类型。两个矩阵必须具有相同的大小和类型。这意味着temp2
必须声明为CV_8UC4
类型,或者必须首先将mRgba
转换为CV_8UC1
,可能是通过转换为灰度。但是等效的C++调用应该是:1cklez4t2#
如果使用onCameraFrame(CameraBridgeViewBase.cvCameraViewFrame inputFrame)对返回的Mat对象进行一些调整,则必须注意使用灰色对象image和rgb对象,因为
CV_8UC4适用于mRgba CV_8UC1适用于灰阶
所以我会重新来看看这个。