我有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.
您可以使用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在评论中指出这一点.
| 归档时间: |
|
| 查看次数: |
540 次 |
| 最近记录: |