[英]How to compare two image with c
我想实现一种能够使用 OpenCV 3.0.0 的 C api 比较两个图像的算法。 图像由网络摄像头捕获,因此它们具有相同的分辨率(不要担心很小)和相同的文件格式(jpeg)(但我们可以根据需要更改它)我的想法是获取两张图像,以黑白和用一个简单的 for 构造逐位比较。 在 b&w 中,我们可以将图像视为具有 0 和 1 的完整矩阵。 例子:
Image1(黑白)
所以我知道用 opencv 有很多方法可以做到这一点,但我读了很多对我没用的例子。 所以我的想法是手动操作每个像素。 将图像视为一个矩阵,我们可以用一个简单的双精度结构来逐个像素地比较 (pixel_image[r:rows][c:columns] == pixel_image2[r:rows][c:columns] 只有当“像素”是被认为是 integer。所以问题是如何从 IplImage 类型中访问像素值?
当然,通过这种方式,我认为我对代码的优化很糟糕,或者我无法使其适应大规模的图像数据。
(请不要回答我:“使用 c++ - 使用 python - c 已弃用 ecc..”,我知道有很多简单的方法可以用高级别的方法做到这一点)
谢谢大家。
好的,我解决了。 这样你就可以访问单个像素的值(如果图像加载为 RGB)(请记住 opencv 见 BGR)
IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3);
double tmpb,tmpg,bmpr;
for(int i=0;i<img->height;i++){
for(int j=0;j<img->width;j++){
tmpb=cvGet2D(img,i,j).val[0];
tmpg=cvGet2D(img,i,j).val[1];
tmpr=cvGet2D(img,i,j).val[2];
}
}
如果图像是单通道(例如,如果我们将其转换为黑白)是
IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3);
int tmp
for(int i=0;i<img->height;i++){
for(int j=0;j<img->width;j++){
tmp=cvGet2D(img,i,j).val[0];
printf("Value: %d",tmp);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.