经过多次实验,我发现用C ++(OpenCV)读取彩色jpg文件的方式与使用C#位图读取同一文件的方式不同。如果在它们上面都应用了一些算法,如GoodFeatureToTrack,那么它们之间有明显的差异。
问题是:如何在OpenCV中采用C#位图加载方式,以便在直接从本机部分加载图像或从C#包装器加载图像时获得相同的结果。
谢谢!
编辑:
此代码是一个C++函数,它接受一些包含在托管程序(C#)中加载的图像的结构,然后在OpenCV中加载相同的图像并进行比较。它们之间是有区别的!
问题是:如何在OpenCV中采用C#位图加载方式,以便在直接从本机部分加载图像或从C#包装器加载图像时获得相同的结果。
谢谢!
编辑:
此代码是一个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();
}
imread
传递不同的标志吗? - Roger RowlandCV_LOAD_IMAGE_ANYDEPTH
来处理16或32位图像,或者使用CV_LOAD_IMAGE_GRAYSCALE
将其转换为灰度图像。默认值是CV_LOAD_IMAGE_COLOR
,这将生成一个3通道的图像。您的图像可能有alpha通道吗? - Roger Rowland