以下代码用于将 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/