Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Emgu Opencv C#转换为不同的结果 我有问题得到C++的.EngU.NET(OpenCV)来产生与C++代码相同的结果。这很简单,我只是打开一个图像作为一个16UC1和转换为32FC1。下面是C++代码: inImg = imread(inPath.c_str(), -1); cv::Mat fltImg; inImg.convertTo(fltImg, CV_32FC1 );_C#_C++_Opencv_Emgucv - Fatal编程技术网

Emgu Opencv C#转换为不同的结果 我有问题得到C++的.EngU.NET(OpenCV)来产生与C++代码相同的结果。这很简单,我只是打开一个图像作为一个16UC1和转换为32FC1。下面是C++代码: inImg = imread(inPath.c_str(), -1); cv::Mat fltImg; inImg.convertTo(fltImg, CV_32FC1 );

Emgu Opencv C#转换为不同的结果 我有问题得到C++的.EngU.NET(OpenCV)来产生与C++代码相同的结果。这很简单,我只是打开一个图像作为一个16UC1和转换为32FC1。下面是C++代码: inImg = imread(inPath.c_str(), -1); cv::Mat fltImg; inImg.convertTo(fltImg, CV_32FC1 );,c#,c++,opencv,emgucv,C#,C++,Opencv,Emgucv,我正在将原始数据字节保存到如下文件: 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和4bytesperpoixel) 在Emgu.NET端: var handle = GCH

我正在将原始数据字节保存到如下文件:

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
bytesperpoixel

在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#

对可能出现的问题有什么想法吗


谢谢

多亏了Dan Masek在评论中-我得到的高度和宽度的顺序对于C代码来说是不正确的

新尺寸(高度,宽度)
-这不是
System.Drawing.Size
,它以相反的顺序获取参数(首先是宽度,然后是高度)?:facepalm:是的-就在钱上。谢谢你的第二双眼睛,丹!