2016-04-06 3 views
0

calcHistを使用して、特定の色範囲のピクセル数を計算したいとします。しかし、私は次のエラーを取得:calcHistを使用してピクチャの特定の範囲内のピクセル数を生成したいときにアサーションが失敗しました

OpenCV Error: Assertion failed (dims <= 2 && data && (unsigned)i0 < (unsigned)(size.p[0]*size.p[1]) && elemSize() == (((((DataType<_Tp>::type) & ((512 - 1) << 3)) >> 3) + 1) << ((((sizeof(size_t)/4+1)*16384|0x3a50) >> ((DataType<_Tp>::type) & ((1 << 3) - 1))*2) & 3))) in cv::Mat::at, file e:\opencv2.4\opencv\build\include\opencv2\core\mat.hpp, line 570 

ZKB_shop.exe has triggered a breakpoint. 

私のコードは以下のように示しています

#include <iostream> 
#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include <opencv2/imgproc/imgproc.hpp> 

using namespace std; 
using namespace cv; 

int main(int argc, const char** argv) { 
    Mat image = imread("D:\\obj\\138.jpg"); 
    Mat img_hsv; 
    cvtColor(image, img_hsv, CV_BGR2HSV); 

    int hbins = 1; 
    int sbins = 1; 
    int vbins = 1; 
    int histSize[] = { hbins,sbins,vbins }; 

    //H 
    float hranges[] = { 0,20 }; 
    //S 
    float sranges[] = { 100,255 }; 
    //V 
    float vranges[] = { 107,245 }; 
    const float* ranges[] = { hranges,sranges,vranges }; 

    MatND hist; 
    //chanels 
    int channels[] = { 0,1,2 }; 

    calcHist(&img_hsv, 1, channels, Mat(), hist, 3, histSize, ranges); 
    cout << "Hist.dims = " << hist.dims << endl; 
    cout << "Value: " << hist.at<double>(0) << endl; 
    cout << "Hist.rows = " << hist.rows << endl; 
    cout << "Hist.cols = " << hist.cols << endl; 
    return 0; 
} 

私は公式のチュートリアルからコード適応:http://docs.opencv.org/3.1.0/d6/dc7/group__imgproc__hist.html#ga4b2b5fd75503ff9e6844cc4dcdaed35d をし、1つの以上のチャンネルを追加しますが、私は、それはdoesnの理由はわかりません仕事はありません。

私はあなたが過剰に複雑にこれをしているVS2015 + WIN10 + OPENCV2.4.11

答えて

0

を使用しています。

与えられた色の範囲の画素数を取得するには、次のことができます。

  1. は非ゼロピクセルの数をカウントしinRange
  2. を使用して、特定の色の範囲内の値のマスクを作成します。

    #include <opencv2/opencv.hpp> 
    using namespace cv; 
    using namespace std; 
    
    int main() 
    { 
        // Read the image 
        Mat image = imread("path_to_image"); 
        // Convert to HSV 
        Mat img_hsv; 
        cvtColor(image, img_hsv, CV_BGR2HSV); 
    
        // Define lower and upper ranges 
        Scalar lower(0, 100, 107); 
        Scalar upper(20, 255, 245); 
    
        // Create a mask with pixels in range 
        Mat1b mask; 
        inRange(img_hsv, lower, upper, mask); 
    
        // Count the number of non-black pixels 
        int cnz = countNonZero(mask); 
    
        cout << "# pixels in range " << cnz << endl; 
    
        return 0; 
    } 
    
    countNonZero

コード付きマスク、

関連する問題