В игровом движке Unity я пытаюсь передать данные из WebCamTexture в собственный плагин C ++, связанный с OpenCV4Android на Android.Я пытался следовать этому уроку , но что-то идет не так, когда я строю Мат.Когда я пытаюсь использовать его при вызове cvtColor, утверждение терпит неудачу для s> = 0 в setSize.Я добавил утверждения сразу после конструктора, чтобы проверить, являются ли строки или столбцы отрицательными, и это только строки.
Это код C ++:
JNIEXPORT void JNICALL Detect(
JNIEnv* env, jobject jobj, Color32* rawImagePixels, jint imageWidth, jint imageHeight, jint maxDetectedShapes, jintArray outDetectedShapesCountSingleArray, jintArray outPointsPerShapeArray)
{
Mat frame(imageHeight, imageWidth, CV_8UC4, rawImagePixels);
assert(frame.cols >= 0);
assert(frame.rows >= 0);
vector<vector<Point>> contours;
// Convert the frame to grayscale for contour detection.
Mat grayscaleFrame;
cvtColor(frame, grayscaleFrame, COLOR_BGR2GRAY);
Mat resizedGray;
}
Это код C #:
public void TestLibCall()
{
if(phoneCameraDisplay.camAvailable)
{
Color32[] rawImagePixels = phoneCameraDisplay.RenderingCameraTexture.GetPixels32();
Array.Reverse(rawImagePixels);
Debug.Log("Input:" + phoneCameraDisplay.RenderingCameraTexture.width + "|" + phoneCameraDisplay.RenderingCameraTexture.height);
OpenCVInterop.Detect(rawImagePixels, phoneCameraDisplay.RenderingCameraTexture.width, phoneCameraDisplay.RenderingCameraTexture.height, _maxShapeDetectCount, ref _detectedShapesCount, _pointsPerShape);
}
}
Ширина и высота WebCamTexture являются положительными числами, когда я их отлаживаю.Не поменять массив Color32 тоже не помогло.Кто-нибудь знает, какая ошибка при построении матрицы OpenCV может привести только к отрицательным строкам?Спасибо.
[Edit:] Я добавил дополнительные утверждения перед конструктором Mat, и jint imageHeight не больше или равен 0, несмотря на то, что он равен 1080 в соответствии с Debug.Log.