经过多次实验,我发现在C++(OpenCV)中读取彩色jpg文件:
自动温度(cv::imread("xxx.jpg");
不同于使用 C# 位图读取同一个文件:
var temp=new bitmap("xxx.jpg");
结果不同。如果我对它们都应用一些算法,比如 GoodFeatureToTrack,会有显着的差异。
问题是: 如何在OpenCV中采用C#加载位图的方式。因此,如果我直接在 native 部分或从 C# Wrapper 加载我的图像,我会得到相同的结果。
谢谢
编辑:
此代码是一个 c++ 函数,它采用一些结构,其中包含在托管程序 (c#) 中加载的图像,然后在 opencv 中加载相同的图像并比较它们。..有一个不同的!
extern "C" _declspec (dllexport) void test_diff(authenticator_reference_structure* referecnces){
auto image(cv::imread("white.jpg"));
cv::imshow("opencv", image);
auto wrpped(referecnces->references->images->image.getMat());
cv::imshow("C#", wrapped);
cv::Mat ss;
cv::absdiff(image, wrapped, ss);
cv::threshold(ss, ss, 1, 255, CV_THRESH_BINARY);
cv::imshow("Diff", ss);
cv::waitKey();
}
最佳答案
也许您可以使用 getImage()
而不是 getMat()
?
这里正在解决一个类似的问题(在 C# 而不是 C++ 中使用 openCV)
http://www.emgu.com/forum/viewtopic.php?t=188
关于c# - 在 OpenCV 与 C# 位图中读取 jpg 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32567325/