簡體   English   中英

如何在C ++中將SFML圖像轉換為OpenCV mat?

[英]how to convert SFML image to OpenCV mat in C++?

下面的代碼用於將OpenCV Mat圖像轉換為SFML圖像。 如何將SFML圖像轉換回Mat圖像?

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

如果紋理或精靈無法轉換為OpenCV Mat,那么可以將sf :: Image轉換為OpenGL並將其轉換回cv :: Mat

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

更新:我提到了這篇文章,但仍然無法轉換。

    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);

這段代碼對我有用:

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對象的內存上創建cv :: Mat,而不是像素的內存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM