经过多次实验,我发现在C++(OpenCV)中读取彩色jpg文件:
auto temp(cv::imread("xxx.jpg");
与使用 C# 位图读取同一文件不同:
var temp=new bitmap("xxx.jpg");
结果不同。如果我对它们应用一些算法(例如 GoodFeaturesToTrack),就会有显着的差异。
问题是:
OpenCV中如何采用C#位图加载的方式。因此,如果我直接在本机部分或从 C# 包装器加载图像,我会得到相同的结果。
Thanks
EDIT:
这段代码是一个 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();
}