2011-11-08 56 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); 

這將導致程序崩潰,但我在新的C假定++的API,cv::Mat對象善於分配自己的記憶。爲這些cv::Mat對象分配內存的最簡單方法是什麼?

+0

我不認爲墜機是由於分配。這可能是Sobel函數的無效輸入。至少在我運行你的代碼時會發生什麼:'OpenCV Error:函數/功能沒有實現(緩衝區格式(= 5)和目標格式(= 1)的不支持組合)getLinearColumnFilter,file/Users/steve /開發/ opencv2/opencv/modules/imgproc/src/filter.cpp,第2674行# – SSteve

+0

其實,你是對的。給出了錯誤的深度。取代了sobel操作的深度參數,我們很好。謝謝! – 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; 
} 
相關問題