【发布时间】:2015-05-05 00:05:29
【问题描述】:
我是OGRE library 的新手。我在 OGRE 中有一个人体模型,我在 'orginalImage' 变量中得到了模型的投影。我想使用 openCV 执行一些图像处理。所以我正在尝试实现 OGRE::Image 到 cv::Mat 的转换。
Ogre::Image orginalImage = get2dProjection();
//This is an attempt to convert the image
cv::Mat destinationImage(orginalImage.getHeight(), orginalImage.getWidth(), CV_8UC3, orginalImage.getData());
imwrite("out.png", destinationImage);
我收到以下错误:
realloc(): invalid pointer: 0x00007f9e2ca13840 ***
在类似的说明中,我尝试将以下作为我的第二次尝试
cv::Mat cvtImgOGRE2MAT(Ogre::Image imgIn) {
//Result image intialisation:
int imgHeight = imgIn.getHeight();
int imgWidth = imgIn.getWidth();
cv::Mat imgOut(imgHeight, imgWidth, CV_32FC1);
Ogre::ColourValue color;
float gray;
cout << "Converting " << endl;
for(int r = 0; r < imgHeight; r++){
for(int c = 0; c < imgWidth; c++){
color = imgIn.getColourAt(r,c,0);
gray = 0.2126 * color.r + 0.7152 * color.g + 0.0722 * color.b;
imgOut.at<float>(r,c) = gray;
}
}
return imgOut;
}
当我执行以下操作之一时,我得到了同样的错误:
imshow("asdfasd", imgOut);
imwrite("asdfasd.png", imgOut);
【问题讨论】:
-
imwrite("out.png", cvImage);是错字吗?应该是destinationImage -
这是代码在您的应用程序中的确切方式吗?
-
基本上我有:Ogre::TexturePtr rtt_texture;食人魔::RenderTexture *renderTexture;中间有一些操作然后renderTexture->update(); rtt_texture->convertToImage(originalImage);
-
您是否测试过
originalImage是否真的是有效的Ogre::Image?它是否包含有效的像素数据? -
是的,它是有效的,因为 originalImage.save("test.png");将图像文件保存到磁盘。