簡體   English   中英

將Texture2D轉換為OpenCV Mat?

[英]Convert Texture2D to OpenCV Mat?

有一個帖子關於如何將OpenCV的cv::MatTexture2D團結我提供了行之有效的答案。 現在,我正試圖做相反的事情,但是已經堅持了幾個小時。

我想將Unity的Texture2D轉換為OpenCV cv::Mat以便可以在C ++端處理Texture。

這是我要轉換為cv:Mat Unity項目中的原始Texture2D

在此處輸入圖片說明

將其轉換為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);
}

我還嘗試在C ++端創建一個struct來保存像素信息,而不是使用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);
}

為什么圖像看起來如此褪色,您如何解決呢?

默認情況下, OpenCV將圖像創建為BGR ,而Color32將像素存儲為RGBA 但是,由於OP在注釋中提到Texture2D.format提供的紋理格式為RGB24 ,因此我們可以完全忽略alpha通道。

DLLExport void TextureToCVMat(unsigned char*  texData, int width, int height)
{
    Mat texture(height, width, CV_8UC4, texData);
    cv::cvtColor(texture,texture,cv::COLOR_BGRA2RGB);

    cv::imshow("Unity Texture", texture);
    cv::waitKey(0);
    cv::destroyAllWindows();

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM