我正试图用相机捕捉最亮的区域。
我正在使用opencv和android studio(JAVA)。到目前为止,关于java的opencv资源和文档有限。
我是一名新手程序员,所以任何建议都会有所帮助。
尝试调试我的代码,但似乎无法像代码那样超越这个代码
Core.MinMaxLocResult max = minMaxLoc(wrapper);
有谁知道如何在JAVA中正确使用MinMaxLocResult函数?
还有一种更有效的方法来找到帧中最亮的区域吗?
我的代码 ` public Mat onCameraFrame(CvCameraViewFrame inputFrame){
Log.e(TAG, "on camera frame ");
Mat mHierarchy = new Mat();
mGrey = inputFrame.gray();
mRgba = inputFrame.rgba();
//find contour
Imgproc.findContours(mGrey,Mcontours,mHierarchy,Imgproc.RETR_EXTERNAL,Imgproc.CHAIN_APPROX_NONE);
double maxMax=0;
int num=0;
for(int x = 0; x < Mcontours.size();x++){
Mat wrapper = Mcontours.get(x);
Core.MinMaxLocResult max = minMaxLoc(wrapper); **//error line**
if(max.maxVal > maxMax){
maxMax = max.maxVal;
num = x;
}
if(x == Mcontours.size()){
Imgproc.circle(mGrey,max.maxLoc,5,CONTOUR_COLOR);
Imgproc.drawContours(mGrey,Mcontours,num,CONTOUR_COLOR);
}
}
返回mGrey } `
答案 0 :(得分:1)
如果你想找到最大的轮廓,请查看我的代码:
mContours = new ArrayList<MatOfPoint>();
mObjectContours = new ArrayList<MatOfPoint>();
private void findObjectContour(Mat src) {
mContours.clear();
Imgproc.findContours(src, mContours, mHierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);
filterContoursArea(mContours);
}
private void filterContoursArea(List<MatOfPoint> mContours) {
double maxArea = getMaxContourArea(mContours);
mObjectContours.clear();
for (int i = 0; i < mContours.size(); i++) {
MatOfPoint contour = mContours.get(i);
if (Imgproc.contourArea(contour) > mMinContourArea * maxArea) {
mObjectContours.add(contour);
}
}
}
private double getMaxContourArea(List<MatOfPoint> contours) {
double maxArea = 0;
double area;
for (int i = 0; i < contours.size(); i++) {
area = Math.abs(Imgproc.contourArea(contours.get(i)));
if (area > maxArea) {
maxArea = area;
}
}
return maxArea;
}
private int calculateMaxContourAreaIdx(List<MatOfPoint> contours) {
double maxArea = 0;
int maxHandContourAreaIdx = 0;
double area;
for (int i = 0; i < contours.size(); i++) {
area = Math.abs(Imgproc.contourArea(contours.get(i)));
if (area > maxArea) {
maxArea = area;
maxHandContourAreaIdx = i;
}
}
return maxHandContourAreaIdx;
}