countNonZero function gives an assertion error in openCV

后端 未结 2 911
挽巷
挽巷 2020-12-15 08:11

I tried to get horizontal projection using countNonZero() function as below.

Mat src = imread(INPUT_FILE, CV_LOAD_IMAGE_COLOR);
Mat binaryImage = src.clone()         


        
2条回答
  •  离开以前
    2020-12-15 08:54

    BTW, you can compute horizontal projection using reduce giving as argument CV_REDUCE_SUM.

    A minimal example:

    Mat1b mat(4, 4, uchar(0));
    mat(0,0) = uchar(1);
    mat(0,1) = uchar(1);
    mat(1,1) = uchar(1);
    
    // mat is: 
    //
    // 1100
    // 0100
    // 0000
    // 0000
    
    // Horizontal projection, result would be a column matrix
    Mat1i reducedHor;
    cv::reduce(mat, reducedHor, 1, CV_REDUCE_SUM);
    
    // reducedHor is:
    //
    // 2
    // 1
    // 0
    // 0
    
    // Vertical projection, result would be a row matrix
    Mat1i reducedVer;
    cv::reduce(mat, reducedVer, 0, CV_REDUCE_SUM);
    
    // reducedVer is:
    //
    // 1200
    
    
    // Summary
    //
    // 1100 > 2
    // 0100 > 1
    // 0000 > 0
    // 0000 > 0
    // 
    // vvvv
    // 1200
    

    You can use this with your images like this:

    // RGB image
    Mat3b img = imread("path_to_image");
    
    // Gray image, contains values in [0,255]
    Mat1b gray;
    cvtColor(img, gray, CV_BGR2GRAY);
    
    // Binary image, contains only 0,1 values
    // The sum of pixel values will equal the count of non-zero pixels
    Mat1b binary;
    threshold(gray, binary, 1, 1, THRESH_BINARY);
    
    // Horizontal projection
    Mat1i reducedHor;
    cv::reduce(binary, reducedHor, 1, CV_REDUCE_SUM);
    
    // Vertical projection
    Mat1i reducedVer;
    cv::reduce(binary, reducedVer, 0, CV_REDUCE_SUM);
    

提交回复
热议问题