2011-11-08 7 views
2

私はいくつかのそれの実際のデータとcv::Mat face;が割り当てられていると私は、次の線に沿って何かを実行したい:cv :: Matオブジェクトを割り当てる最も一般的な方法は何ですか?

cv::Mat gray_image; 
cv::Mat x_gradient_image; 
cv::Mat temp; 

cv::cvtColor(face, gray_image, CV_RGB2GRAY); 
cv::Sobel(gray_image, temp, 1, 1, 0); 
cv::convertScaleAbs(temp, x_gradient_image, 1, 0); 

これは、プログラムがクラッシュし、私はcv::Matオブジェクトという新しいC++のAPIで想定自分の記憶を割り当てることができました。それらのcv::Matオブジェクトのメモリを割り当てる最も簡単な方法は何ですか?

+0

私はクラッシュが割り当てによるものではないと思います。おそらく、Sobel関数への無効な入力です。 OpenCVエラー:getLinearColumnFilter、file/Users/steve /に、関数/機能が実装されていません(バッファフォーマット(= 5)と宛先フォーマット(= 1)のサポートされていない組み合わせ)が実装されていません。開発/ opencv2/opencv/modules/imgproc/src/filter.cpp、行2674' – SSteve

+0

実際には、あなたは正しいです。間違った深さが与えられます。 sobel操作のdepthパラメータを置き換えて、うまくいきました。ありがとう! – Chris

答えて

1

私はソーベルの呼び出しで奥行きパラメータを変更し、あなたのコードは私のために働いた:

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

int main(int argc, const char * argv[]) { 

    cv::Mat face; 
    // read an image 
    if (argc < 2) 
     face = cv::imread("../../IMG_0080.jpg"); 
    else 
     face = cv::imread(argv[1]); 

    if (!face.data) { 
     std::cout << "Image file not found\n"; 
     return 1; 
    } 

    cv::Mat gray_image; 
    cv::Mat x_gradient_image; 
    cv::Mat temp; 

    cv::cvtColor(face, gray_image, CV_RGB2GRAY); 
    cv::Sobel(gray_image, temp, 5, 1, 0); 
    cv::convertScaleAbs(temp, x_gradient_image, 1, 0); 

    // show the image in a window 
    cv::imshow("so8044872", x_gradient_image); 
    // wait for key 
    cv::waitKey(0); 

    return 0; 
} 
関連する問題