我有 RGB 图像,例如大小为 2x2 如下:

[  0,  14, 255,  75, 156, 255;
  45, 255, 234, 236, 141, 255]

我想将每个像素(所有 RGB channel )复制 2x2 次并获得如下所示的图像:
[  0,  14, 255,  0, 14, 255,  75, 156, 255, 75, 156, 255;
   0,  14, 255,  0, 14, 255,  75, 156, 255, 75, 156, 255;
  45, 255, 234,  45, 255, 234, 236, 141, 255, 236, 141, 255;
  45, 255, 234,  45, 255, 234, 236, 141, 255, 236, 141, 255  ]

在 Matlab 或 Python 中,我只需使用 kron 函数即可完成此操作,但我无法弄清楚如何在 OpenCV C++ 中轻松完成。请注意,这是一个微不足道的示例,我实际上想将每个像素复制 16x16 并在更大的图像上进行复制,当然不是 2x2。

最佳答案

您可以将 resize 与最近邻插值 INTER_NEAREST 一起使用:

代码:

Mat mInput(2, 2, CV_8UC3),mOutput(4, 4, CV_8UC3);

mInput.at<Vec3b>(0,0)= Vec3b(0,14,255);
mInput.at<Vec3b>(0,1)= Vec3b(75,156,255);
mInput.at<Vec3b>(1,0)= Vec3b(45,255,234);
mInput.at<Vec3b>(1,1)= Vec3b(236,141,255);

cout<<mInput<<"\n";

resize(mInput,mOutput,Size(4,4),0,0,INTER_NEAREST);

cout<<mOutput<<"\n";;

输出
[  0,  14, 255,  75, 156, 255;
  45, 255, 234, 236, 141, 255]
[  0,  14, 255,   0,  14, 255,  75, 156, 255,  75, 156, 255;
   0,  14, 255,   0,  14, 255,  75, 156, 255,  75, 156, 255;
  45, 255, 234,  45, 255, 234, 236, 141, 255, 236, 141, 255;
  45, 255, 234,  45, 255, 234, 236, 141, 255, 236, 141, 255]
Press any key to continue . . .

感谢@wendelbsilva 在评论中指出这一点。

关于c++ - 在 OpenCV 中复制像素值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32954303/

10-12 00:23
查看更多