2016-10-02 5 views
3

Ниже код используется для преобразования изображения OpenCV Mat в изображение SFML. Как преобразовать изображение SFML обратно в изображение Mat?Как конвертировать SFML-изображение в OpenCV mat в C++?

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

Если текстура или спрайт не может быть преобразован в OpenCV Мат, то есть возможность конвертировать НФ :: изображения в OpenGL и преобразовать его обратно в ЦВ :: Mat

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

Update : Я ссылался на 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(); 
} 

Ваш код аварии, потому что вы пытаетесь создать резюме :: Мать в памяти объекта sf :: Image, а не в памяти пикселей.