我希望从两张图片中获取最大值,同时保留其他信息。
例如,我有两个HSL格式的图像,我希望得到的图像由最亮的像素组成。 (这是一个例子,实际上我无法转换为RGB,找到最大值,然后转换回来)
所以我不能使用cvMax
因为它会分别给我最大H,最大S和最大L。
我需要的是来自任一图像的最大L的图像,以及来自同一图像的H和S值(或其他信息)。
例如,考虑这些2x1像素图像及其HSV标量:
IplImage* img1 = cvCreateImage(cvSize(2, 1), IPL_DEPTH_32F, 3);
cvSet2D(img1, 0, 0, cvScalar(1, 2, 45)); // Remember: HSV values
cvSet2D(img1, 0, 1, cvScalar(3, 4, 123));
IplImage* img2 = cvCreateImage(cvSize(2, 1), IPL_DEPTH_32F, 3);
cvSet2D(img1, 0, 0, cvScalar(5, 6, 114));
cvSet2D(img1, 0, 1, cvScalar(7, 8, 33));
IplImage* result = cvCreateImage(cvSize(2, 1), IPL_DEPTH_32F, 3);
//Do something to get the brightest pixels
CvScalar px0 = cvGet2D(result, 0, 0);
CvScalar px1 = cvGet2D(result, 0, 1);
cout << px0.val[0] << " " << px0.val[1] << " " << px0.val[2] << endl;
cout << px1.val[0] << " " << px1.val[1] << " " << px1.val[2] << endl;
输出应该变为:
5 6 114
3 4 123
有没有一种巧妙的'OpenCV'方法,而不是制作我自己的,可能更慢的解析每个像素的算法?
只是一个想法,但我可以这样做吗?
大胆的一步是我陷入困境。
答案 0 :(得分:2)
没有内置的opencv功能,但编写自己的功能并不困难。
你可以简单地
for(i=0;i<h;i++)
for (j=0;j<w;j++)
dst[j+w*i] = (src1[j+w*i]>src2[j+w*i])?src1[]:src2[];
当然,可以进行一些小的优化,比如预先计算j + w * i,或使用指针访问而不是数组索引。