【发布时间】:2015-10-14 23:03:56
【问题描述】:
我在使用 jpg 文件的 Windows 7 上的 Matlab (2014) 和 OpenCV (3.0) 中遇到了函数 imread() 的问题。
通过读取相同的文件 jpg 和相同的像素,我没有相同的值。
这是我的 2 个代码:(OpenCV 代码后跟 Matlab 代码)和我拥有的值(在 OpenCV 中查看模式调试,在 Matlab 中查看键盘)
#include <opencv2\opencv.hpp>
#include <cstdio>
using namespace cv;
using namespace std;
int main()
{
Mat img = imread("test.jpg");
uchar pb = img.at<Vec3b>(0, 0).val[0];
uchar pg = img.at<Vec3b>(0, 0).val[1];
uchar pr = img.at<Vec3b>(0, 0).val[2];
int d = img.depth();
int t = img.type();
}
价值观:
pixel [0,0] = (147,174,204); // = index(1,1) in the image.
d = 0;
t = 16;
代码 Matlab :
img = imread('test.jpg');
img(1,1,:)
whos img
价值观:
ans(:,:,1) =
148
ans(:,:,2) =
174
ans(:,:,3) =
201
Name Size Bytes Class Attributes
img 1920x2560x3 14745600 uint8
你知道为什么价值观不同吗?
我在另一篇文章中看到过这样的问题,但这个人通过阅读 tiff 并没有相同的深度。在这里你可以看到我有同样的深度!
提前感谢您,对于任何英语错误,我们深表歉意。
PS:我也对其他像素进行了测试,结果相同:封闭结果但不完全相等。
【问题讨论】:
-
您能否提供有问题的 JPEG 文件以供进一步调查?
-
还发布了整个 openCV 代码,您可以在其中保存图像。
-
matlab代码和c++应用程序在同一个目录吗?你确定这两个文件是一样的吗?例如您没有在其他位置打开+保存图像(可能会引入额外的 jpeg 压缩效果)?
-
您好!感谢您的回答,很抱歉我的回答耽误了时间! @ypnos 我丢失了我的第一个示例,但我找到了另一个示例,您可以使用这张图片 link 测试我上面写的代码,尝试使用 Matlab 中的像素 (86,86)(等等 (85,85 ) 在 openCV 中。我在 openCV 中找到 (92,104,118),在 Matlab 中找到 (91,105,118)。
-
@AnderBiguri 我不保存图像。这是我测试的全部代码。我在 Visual Studio 2013 中使用“调试”检查 openCV 值,但如果我添加 cout 以在控制台中查看值,它是相同的。
标签: matlab opencv jpeg opencv3.0 imread