簡體   English   中英

Emgu Opencv C# ConvertTo 不同的結果

[英]Emgu Opencv C# ConvertTo different results

我在讓 C# Emgu.NET (opencv) 產生與類似 C++ 代碼相同的結果時遇到問題。 這很簡單,我只是將圖像作為 16UC1 打開並轉換為 32FC1。 這是 C++ 代碼:

inImg = imread(inPath.c_str(), -1);
cv::Mat fltImg;
inImg.convertTo(fltImg, CV_32FC1  );

我將原始數據字節保存到這樣的文件中:

std::ofstream fout;
fout.open(filename, std::ios::binary | std::ios::out);

fout.write((char*)img.data, img.rows * img.cols * bytesPerPixel);

fout.close();

我正在保存 inImg 和 fltImg 以用於調試目的(分別為 2 和 4 bytesPerPixel

在 Emgu.NET 方面:

var handle = GCHandle.Alloc(pixelValues, GCHandleType.Pinned);
try
{
    var ptr = handle.AddrOfPinnedObject();
    var mat = new Mat(new Size(height, width), DepthType.Cv16U, 
                    1, ptr, width * 2);

   var convMat = new Mat();
   mat.ConvertTo(convMat, DepthType.Cv32F);
}
finally
{
    if (handle.IsAllocated)
    {
        handle.Free();
    }
}

我通過以下方式保存原始文件:

private void SaveDebugImage(string filename, Mat img, int depth)
{
    byte[] data = MatData(img, depth);
    File.WriteAllBytes(filename, data);
}

private byte[] MatData(Mat img, int pixelBytes)
{
    var ptr = img.DataPointer;
    int size = img.Rows * img.Cols * pixelBytes;
    var outBytes = new byte[size];
    Marshal.Copy(ptr, outBytes, 0, size);
    return outBytes;
}

比較前 (16 bpp) 圖像,它們是相同的,但調用 convertTo 之后的圖像會導致不同的圖像:

C++ C++ 輸出

C# C# 輸出

關於可能出什么問題的任何想法?

謝謝!

感謝 Dan Masek 在評論中 - 我得到的 C# 代碼的高度和寬度的順序不正確

暫無
暫無

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

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