2016-10-02 134 views
3

下面的代碼用於將OpenCV Mat圖像轉換爲SFML圖像。如何將SFML圖像轉換回Mat圖像?如何在C++中將SFML圖像轉換爲OpenCV mat?

cv::Mat frameBGR, frameBGRA; 
    sf::Image image; 
    cv::cvtColor(frameBGR, frameRGBA, cv::COLOR_BGR2RGBA); 
    image.create(frameRGBA.cols, frameRGBA.rows, frameRGBA.ptr()); 

如果紋理或子畫面不能轉換到的OpenCV墊,然後是有可能SF ::圖像轉換爲OpenGL和將其轉換回CV ::墊

sf::Texture texture; 
    sf::Event event; 
    sf::Sprite sprite; 
    texture.loadFromImage(image); 
    sprite.setTexture(texture); 

更新:我參考了this的帖子,但仍然無法轉換。

void* buffer = ℑ 
    cv::Mat image_mat = cv::Mat(cvSize(500, 500),CV_8UC4, buffer, cv::Mat::AUTO_STEP); 
    cvtColor(image_mat, converted,CV_RGBA2BGR); 

它崩潰在下面的代碼行(當我顯示圖像)

imshow("img", converted); 

回答

1

此代碼爲我工作:

cv::Mat sfml2opencv(const sf::Image& img){ 
    //get size from image 
    cv::Size size(img.getSize().x, img.getSize().y); 
    //create a mat on image memory 
    cv::Mat mat(size,CV_8UC4, (void*)img.getPixelsPtr(), cv::Mat::AUTO_STEP); 
    //make SFML RGBA to OpenCV BGRA 
    cv::cvtColor(mat, mat, cv::COLOR_RGBA2BGRA); 
    //clone mat to avoid memory editing on image memory 
    return mat.clone(); 
} 

你的代碼崩潰,因爲你嘗試創建簡歷:: Mat在sf :: Image對象的內存中,而不是像素的內存。

相關問題