2016-10-02 90 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对象的内存中,而不是像素的内存。

相关问题