经过多次实验,我发现在C(OpenCV)中读取彩色jpg文件:
auto temp(cv :: imread(“xxx.jpg”);
与使用C#位图读取同一文件不同:
var temp = new bitmap(“xxx.jpg”);
结果不同.如果我在它们上面应用了一些像GoodFeatureToTrack这样的算法,那么会有明显的差异.
问题是:
如何在OpenCV中采用C#位图加载的方式.因此,如果我直接在本机部分或C#Wrapper中加载我的图像,我得到相同的结果.
谢谢
编辑:
这段代码是一个c函数,它接受一些包含在manged程序(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#中使用openCV而不是C)
http://www.emgu.com/forum/viewtopic.php?t=188