【发布时间】:2015-12-10 14:29:25
【问题描述】:
经过多次实验,我发现在 C++ (OpenCV) 中读取彩色 jpg 文件:
auto temp(cv::imread("xxx.jpg");
不同于使用 C# 位图读取同一个文件:
var temp=new bitmap("xxx.jpg");
结果不同。如果我对它们都应用了一些算法,比如 GoodFeatureToTrack,会有显着差异。
问题是: 如何在 OpenCV 中采用 C# 位图加载方式。因此,如果我直接在本机部分或从 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();
}
【问题讨论】:
-
什么类型的图片?灰度?颜色?您是否尝试过将不同的标志传递给
imread? -
彩色图像“不同的标志”是为了什么?
-
您可以使用
CV_LOAD_IMAGE_ANYDEPTH处理16 位或32 位图像,或使用CV_LOAD_IMAGE_GRAYSCALE转换为灰度。默认值为CV_LOAD_IMAGE_COLOR,这将产生一个 3 通道图像。你的图片可能有 Alpha 通道吗? -
我不认为它包含 alpha 通道...但是,我将尝试 CV_LOAD_IMAGE_ANYDEPTH
-
我试过了。它不返回 3 通道。我需要结果是 3 个通道(颜色)