OpenCV C ++ calcHist到Java

我正在尝试在我的Android设备上运行一些c ++代码; 但是,我遇到了一个我正在使用的Mat类型的小问题。 我试图转换的代码如下(第二个函数调用第一个):

 static Mat histc_(const Mat& src, int minVal=0, int maxVal=255, bool normed=false) { Mat result; // Establish the number of bins. int histSize = maxVal-minVal+1; // Set the ranges. float range[] = { static_cast(minVal), static_cast(maxVal+1) }; const float* histRange = { range }; // calc histogram calcHist(&src, 1, 0, Mat(), result, 1, &histSize, &histRange, true, false); // normalize if(normed) { result /= (int)src.total(); } return result.reshape(1,1); } static Mat histc(InputArray _src, int minVal, int maxVal, bool normed) { Mat src = _src.getMat(); switch (src.type()) { case CV_8SC1: return histc_(Mat_(src), minVal, maxVal, normed); break; case CV_8UC1: return histc_(src, minVal, maxVal, normed); break; case CV_16SC1: return histc_(Mat_(src), minVal, maxVal, normed); break; case CV_16UC1: return histc_(src, minVal, maxVal, normed); break; case CV_32SC1: return histc_(Mat_(src), minVal, maxVal, normed); break; case CV_32FC1: return histc_(src, minVal, maxVal, normed); break; default: CV_Error(Error::StsUnmatchedFormats, "This type is not implemented yet."); break; } return Mat(); } 

现在我的java代码将这两个函数组合成1,因为我的类型始终是相同的:CV_32SC1。

 private Mat histc(Mat src, int minVal, int maxVal) { Mat result = new Mat(); MatOfInt histSize = new MatOfInt(maxVal - minVal + 1); MatOfFloat histRange = new MatOfFloat(minVal, maxVal + 1); MatOfInt channels = new MatOfInt(0); Log.d(TAG, "Type: " + CvType.typeToString(src.type())); src.convertTo(src, CvType.CV_32S); Imgproc.calcHist(Arrays.asList(src), channels, new Mat(), result, histSize, histRange); return result.reshape(1,1); } 

我收到错误OpenCV Error: Unsupported format or combination of formats () in void cv::calcHist我从另一个问题中发现这是因为我的src矩阵的类型是CV_32SC1 。 所以我的问题是我不知道如何将第二个c ++函数中的这些行正确转换为Java:

 case CV_32SC1: return histc_(Mat_(src), minVal, maxVal, normed); break; 

我试图弄清楚如何在Java中做类似于Mat_(src)事情。

供参考: 这是我正在尝试做的整个代码的链接

 Mat_(src) 

只需根据calcHist的要求创建一个类型为CV_32F的Mat对象,其中包含src的内容。

所以做一个就足够了

 src.convertTo(src, CvType.CV_32F);