经过多次实验,我发现,在C阅读彩色JPG文件++(OpenCV的):读取JPG文件在OpenCV中对C#位图
auto temp(cv::imread("xxx.jpg");
是使用C#位图读同一个文件的不同:
var temp=new bitmap("xxx.jpg");
结果是不同的。如果我在它们上应用了一些算法,就像GoodFeatureToTrack一样,这是值得注意的差异。
问题是: 如何在OpenCV中调用C#位图加载的方式。所以,如果我直接在本机部分或从C#包装器加载图像,我会得到相同的结果。
由于
编辑:
此码是采取一些结构包含该装填在manged程序(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'? –
彩色图像 “不同的标志”为什么? –
您可以对16或32位图像使用'CV_LOAD_IMAGE_ANYDEPTH',或将'CV_LOAD_IMAGE_GRAYSCALE'转换为灰度。默认值是'CV_LOAD_IMAGE_COLOR',这将导致3通道图像。你的图片是否有alpha通道? –