c++ - 如何在 C++ 中将 SFML 图像转换为 OpenCV mat?

标签 c++ opencv opengl image-processing sfml

以下代码用于将 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());

如果纹理或 Sprite 不能转换为OpenCV Mat,那么是否可以将sf::Image转换为OpenGL并将其转换回cv::Mat

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

最佳答案

这段代码对我有用:

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。

关于c++ - 如何在 C++ 中将 SFML 图像转换为 OpenCV mat?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39816080/

相关文章:

Delphi - GLScene如何获取拾取对象的x,y,z

opengl - 用于数组大小的专门化常量

c++ - T 类型的左值必须标识 T 类型的对象吗?如果 `p` 的类型为 `T *` ,那么 `&*p` 是否需要 `p` 才能实际指向类型为 `T` 的对象?

c++ - 调整 vector 大小并检索值,这是正确的还是在任何情况下都可能导致段错误?

c++ - C++ 标准的哪一部分允许在括号中声明变量?

c++ - 如何将 unique_ptr<char[]> 传递给要使用的函数

python - 切掉一个角的矩形的非精确形状检测

c++ - 如何将已经写入xml文件的OpenCV Mat转换回图像?

opencv - 图像中的目标检测

C++:跟踪耗时