Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java openCV KNN findNearest错误_Java_Opencv_Ocr_Knn - Fatal编程技术网

Java openCV KNN findNearest错误

Java openCV KNN findNearest错误,java,opencv,ocr,knn,Java,Opencv,Ocr,Knn,我试图实现KNN findNearest函数。我的程序将识别图片中的数字,但如果程序使用findNearest,我会出错。代码如下: `private void searchingData() { img_gray = new Mat(); img_blur = new Mat(); img_thres = new Mat(); Imgproc.cvtColor(img, img_gray, Imgproc.COLOR_BGR2GRAY); Imgpr

我试图实现KNN findNearest函数。我的程序将识别图片中的数字,但如果程序使用findNearest,我会出错。代码如下:

`private void searchingData() {

    img_gray = new Mat();
    img_blur = new Mat();
    img_thres = new Mat();

    Imgproc.cvtColor(img, img_gray, Imgproc.COLOR_BGR2GRAY);
    Imgproc.GaussianBlur(img_gray, img_blur, new Size(5,5), 0);
    //Imgproc.adaptiveThreshold(img_blur, img_thres, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 7, 5);
    Imgproc.Canny(img_blur, img_thres, 10, 100); 

    Imgproc.findContours(img_thres, contours, new Mat(), Imgproc.RETR_LIST,Imgproc.CHAIN_APPROX_SIMPLE);

    for(int i=0; i< contours.size();i++){

        Rect rect = Imgproc.boundingRect(contours.get(i));

        if (rect.height < 50 && rect.height > 20){ 

            System.out.println(rect.x +","+rect.y+","+rect.height+","+rect.width);

            Mat subImg = new Mat();
            Imgproc.resize(img.submat(rect), subImg, new Size(10,10));

            //Found numbers then try to recognize it
            recognize(subImg);
        }
    }
}

public void learn() { //get the training data and train the KNN

    Mat sample, training_img = new Mat(), res = new Mat();

    for (int i = 1; i < 10; i++) {

        String path = String.format(".../Documents/numbers/%03d.png", i);
        sample = Imgcodecs.imread(path, Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE);

        Mat m = new Mat(new Size(1,1), CvType.CV_32FC1);
        m.setTo(new Scalar(i));
        res.push_back(m);

        training_img.push_back(prepareImg(sample));
    }

    model = KNearest.create();
    model.train(training_img, Ml.ROW_SAMPLE, res);

}

private Mat prepareImg(Mat img) { //change image in the right format
    Mat sample = new Mat(), sized = new Mat();

    Imgproc.resize(img, sized, new Size(10,10));
    sized.reshape(1,1).convertTo(sample, CvType.CV_32FC1);

    return sample;
}

public void recognize(Mat getImg) {

    Mat results = new Mat();
    Mat dists   = new Mat();

    float result = model.findNearest(prepareImg(getImg), 2, results, new Mat(), dists);

    //result should be the number in getImg
    System.out.println(result);
}`
`private void searchingData(){
img_gray=新垫();
img_blur=新垫();
img_thres=新垫();
Imgproc.cvt颜色(img,img_灰,Imgproc.COLOR_bgr2灰);
高斯模糊(img_灰度,img_模糊,新尺寸(5,5),0);
//Imgproc.adaptiveThreshold(img_blur,img_thres,255,Imgproc.ADAPTIVE_THRESH_MEAN_C,Imgproc.THRESH_BINARY,7,5);
img_blur,img_thres,10100;
Imgproc.findContours(img_thres,等高线,new Mat(),Imgproc.RETR_列表,Imgproc.CHAIN_近似简单);
对于(int i=0;i20){
System.out.println(矩形x+”、“+矩形y+”、“+矩形高度+”、“+矩形宽度);
Mat subImg=新Mat();
Imgproc.resize(img.submat(rect),subImg,新大小(10,10));
//找到数字,然后尝试识别它
识别(subImg);
}
}
}
public void learn(){//获取训练数据并训练KNN
Mat样本,培训=新Mat(),res=新Mat();
对于(int i=1;i<10;i++){
字符串路径=String.format(“…/Documents/numbers/%03d.png”,i);
sample=Imgcodecs.imread(路径、Imgcodecs.CV\u加载\u图像\u灰度);
材料m=新材料(新尺寸(1,1),CvType.CV_32FC1);
m、 setTo(新标量(i));
res.推回(m);
培训模拟推回(准备(样本));
}
model=KNearest.create();
模型训练(训练img,Ml.ROW样本,res);
}
私有Mat prepareImg(Mat img){//以正确的格式更改图像
材料样品=新材料(),尺寸=新材料();
Imgproc.resize(img,sized,new Size(10,10));
调整尺寸。重塑(1,1)。转换为(样品,CvType.CV_32FC1);
返回样品;
}
公共无效识别(Mat getImg){
Mat结果=新Mat();
Mat dists=新Mat();
float result=model.findNearest(prepareImg(getImg),2,results,new Mat(),dists);
//结果应该是getImg中的数字
系统输出打印项次(结果);
}`
OpenCV错误:断言失败(test_samples.type()==CV_32F&& 测试_samples.cols==samples.cols)中的 cv::ml::BruteForceImpl::findNearest,文件 C:\builds\master\u PackSlaveAddon-win64-vc12-static\opencv\modules\ml\src\knearest.cpp, 线程“main”CvException中的第325行异常 [org.opencv.core.CvException:cv::Exception: C:\builds\master\u PackSlaveAddon-win64-vc12-static\opencv\modules\ml\src\knearest.cpp:325: 错误:(-215)test_samples.type()==CV_32F&&test_samples.cols== 函数cv::ml::BruteForceImpl::findNearest中的samples.cols]

非常感谢