OpenCV C++ calcHist to Java
OpenCV C++ calcHist to Java
我正在尝试让一些c++代码在我的Android设备上运行;但是,我在使用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<float>(minVal), static_cast<float>(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_<float>(src), minVal, maxVal, normed);
break;
case CV_8UC1:
return histc_(src, minVal, maxVal, normed);
break;
case CV_16SC1:
return histc_(Mat_<float>(src), minVal, maxVal, normed);
break;
case CV_16UC1:
return histc_(src, minVal, maxVal, normed);
break;
case CV_32SC1:
return histc_(Mat_<float>(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_<float>(src), minVal, maxVal, normed);
break;
我正试图弄清楚如何在Java中做一些类似于Mat_<float>(src)
的事情。
供参考:这是我现在尝试做的整个代码的链接
Mat_<float>(src)
只需根据calcHist的要求,创建一个具有src内容的CV_32F类型的新Mat对象。
所以做就足够了
src.convertTo(src, CvType.CV_32F);
相关文章:
- "error: no matching function for call to"构造函数错误
- 调用专用模板时出错"no matching function for call to [...]"
- C++ Singleton - Prevent ::instance() to variable
- C++ equivalent to Java Map getOrDefault?
- C++ to Java DepthFirstSearch translation
- BigInteger java method to gmp c++
- jni String to *char and java.lang.UnsatisfiedLinkError:
- std::vector to java.util.Vector code generation with swig
- '>>>' Java to C++
- java lwuit port to C++
- OpenCV C++ calcHist to Java
- Android OpenCV port C++ to Java
- Android 中的 OpenCV Rotate(纠偏) - C++ to Java 转换
- JNI, Java to C++ in Eclipse: undefined reference to '_imp__JNI_CreateJavaVM@12'
- Unsigned int64 C++ to Java
- C++ to Java(openmp)
- Java/C/C++/C#/PHP to Pascal converter?
- Java JNI UnsatisfiedLinkError C char pointer to pointer
- java socket.read to b[] 忽略从 JNI 映射的区域
- Java to C++ syntax