我有一个java函数,我想用C ++重新编码以提高效率。问题是我不知道如何在C ++中的Mat中获得像素的BRG值。
这是我的java函数:
private static Mat f_blanc(Mat A) {
double c = 1.2;
Size sz = A.size();
Mat A1 = new Mat(sz, 0);
for (int i = 0; i < sz.width; i++) {
for (int j = 0; j < sz.height; j++) {
double b = A.get(j, i)[0];
double g = A.get(j, i)[1];
double r = A.get(j, i)[2];
if (r < c * b || g < c * b) {
A1.put(j, i, 255);
}
}
}
return A1;
}
答案 0 :(得分:0)
如果你有Mat,你可以使用“data”成员变量来访问数据。
Mat img;
for( int h = 0; h < img.height; h++ )
{
for( int w = 0; h < (img.width*3); w += 3 ) // if you have 3 channels
{
int pos = h* img.width*3 + w*3;
double b = img.data[pos];
double g = img.data[pos+1];
double r = img.data[pos+2];
}
}
我没有编译这个,用作参考代码并欢迎你的评论
答案 1 :(得分:-1)
这取决于矩阵的类型。您可以使用
访问BRG值Vec3b& intensity = A.at<Vec3b>(j, i);
uchar& b = intensity.val[0];
uchar& g = intensity.val[1];
uchar& r = intensity.val[2];
表示矩阵类型CV_8U3
,范围为[0,255]或
Vec3f& intensity = A.at<Vec3d>(j, i);
double& b = intensity.val[0];
double& g = intensity.val[1];
double& r = intensity.val[2];
表示[0,1]范围内的矩阵类型CV_64F3
双精度值。
这些值是参考。您可以通过为它们指定值来编辑它们
b = 255;