在OpenCV中复制像素值

chr*_*tic 3 c++ opencv

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

[  0,  14, 255,  75, 156, 255;
  45, 255, 234, 236, 141, 255]
Run Code Online (Sandbox Code Playgroud)

我想复制每个像素(所有RGB通道)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  ]
Run Code Online (Sandbox Code Playgroud)

在Matlab或Python中,我只是通过使用该kron函数来实现这一点,但我无法弄清楚如何在OpenCV C++中轻松完成.请注意,这是一个简单的例子,我实际上想要将每个像素复制16x16并在更大的图像上进行复制,当然不是2x2.

Bal*_*i R 6

您可以使用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";;    
Run Code Online (Sandbox Code Playgroud)

产量

[  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 . . .
Run Code Online (Sandbox Code Playgroud)

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