gpt4 book ai didi

opencv - glReadPixels 不适用于非方形宽度和高度?

转载 作者:太空宇宙 更新时间:2023-11-03 23:16:44 33 4
gpt4 key购买 nike

目前我的视口(viewport)上是:

enter image description here

这是我导出图片的方法。

void exportImage()
{
int width = 200;
int height = 100;
GLubyte *data = new GLubyte[4*width*height];
glReadPixels(0,0,width,height,GL_RGBA,GL_UNSIGNED_BYTE, data);
cv::Mat imageMat(width, height, CV_8UC4, data);
cv::flip(imageMat, imageMat, 0);
cv::imwrite("ok.jpg",imageMat);
}

当使用800x800时,(请不要介意黄色变成蓝色)

enter image description here

当使用 200x200 时,

enter image description here

但是当使用 200x100 时,

void exportImage()
{
int width = 200;
int height = 100;
GLubyte *data = new GLubyte[4*width*height];
glReadPixels(0,0,width,height,GL_RGBA,GL_UNSIGNED_BYTE, data);
cv::Mat imageMat(width, height, CV_8UC4, data);
cv::flip(imageMat, imageMat, 0);
cv::imwrite("ok.jpg",imageMat);
}

enter image description here

首先width变成了height,图片不对。看起来像数组索引移位问题,但我不明白为什么,因为根据代码,分配也应根据宽度和高度而变化。

当我尝试在 glReadPixels 中交换宽度和高度时:

void exportImage()
{
int width = 200;
int height = 100;
GLubyte *data = new GLubyte[4*width*height];
glReadPixels(0,0,height,width,GL_RGBA,GL_UNSIGNED_BYTE, data);
cv::Mat imageMat(width, height, CV_8UC4, data);
cv::flip(imageMat, imageMat, 0);
cv::imwrite("ok.jpg",imageMat);
}

enter image description here

图像看起来正确吗?但是宽度和高度仍然交换了??

最佳答案

好吧,我犯了一个非常愚蠢的错误。 glReadPixels 实际上很好,但 cv::Mat 的初始化对应于行 x 列,这意味着高度 x 宽度。所以交换后,输出现在看起来很好。

void exportImage()
{
int width = 200;
int height = 100;
GLubyte *data = new GLubyte[4*width*height];
glReadPixels(0,0,width,height,GL_RGBA,GL_UNSIGNED_BYTE, data);
cv::Mat imageMat(height, width, CV_8UC4, data);
cv::flip(imageMat, imageMat, 0);
cv::imwrite("ok.jpg",imageMat);
}

enter image description here

关于opencv - glReadPixels 不适用于非方形宽度和高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37904676/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com