<强> C++代码< /强>:
dllexport void texturetocvmat(unsigned char*texdata,int width,int height)
{
垫子纹理(高度、宽度、cv uc4、texdata);
cvNamedWindow(“统一纹理”,cv_window_normal);
//cvResizeWindow(“Unity纹理”,200,200);
cv::imshow(“统一纹理”,纹理);
cv::imwrite(“inno image.jpg”,纹理);
}
我还尝试在C++端创建一个Stult以保存像素信息,而不是使用<代码>无符号CHAR*<代码>,但结果仍然是相同的:
struct color32
{
乌哈尔R;
乌哈尔G;
乌哈尔B;
乌哈尔A;
}(二)
dllexport void texturetocvmat(color32*texdata,int width,int height)
{
垫子纹理(高度、宽度、cv uc4、texdata);
cvNamedWindow(“统一纹理”,cv_window_normal);
cvResizeWindow(“统一纹理”,200,200);
cv::imshow(“统一纹理”,纹理);
}
为什么这张照片看起来如此落伍?你如何修复它?Texture2D
在团结和我提供了一个很好的答案。现在,我正试着做相反的事情,但是我已经在这个问题上坚持了几个小时了。
我想转换Unity的纹理2d
打开cv简历:材料
这样我就可以处理C++上的纹理了。
这是原件纹理2d
在我的Unity项目中,我想转换为cv:Mat
以下内容:
这是它转换成简历:材料
以下内容:
它看起来很破旧。我不担心图像的旋转.我可以解决这个问题。只是想知道为什么它看起来那么破烂。也使用cv::imwrite
为了测试目的而保存图像,但保存的图像中也存在问题。
C代码以下内容:
[DllImport("TextureConverter")]
private static extern float TextureToCVMat(IntPtr texData, int width, int height);
unsafe void TextureToCVMat(Texture2D texData)
{
Color32[] texDataColor = texData.GetPixels32();
//Pin Memory
fixed (Color32* p = texDataColor)
{
TextureToCVMat((IntPtr)p, texData.width, texData.height);
}
}
public Texture2D tex;
void Start()
{
TextureToCVMat(tex);
}
C++代码以下内容:
DLLExport void TextureToCVMat(unsigned char* texData, int width, int height)
{
Mat texture(height, width, CV_8UC4, texData);
cvNamedWindow("Unity Texture", CV_WINDOW_NORMAL);
//cvResizeWindow("Unity Texture", 200, 200);
cv::imshow("Unity Texture", texture);
cv::imwrite("Inno Image.jpg", texture);
}
我还尝试创建一个struct
在C++侧保存像素信息而不是使用unsigned char*
但结果仍然是一样的:
struct Color32
{
uchar r;
uchar g;
uchar b;
uchar a;
};
DLLExport void TextureToCVMat(Color32* texData, int width, int height)
{
Mat texture(height, width, CV_8UC4, texData);
cvNamedWindow("Unity Texture", CV_WINDOW_NORMAL);
cvResizeWindow("Unity Texture", 200, 200);
cv::imshow("Unity Texture", texture);
}
为什么这张照片看起来如此落伍?你如何修复它?