我有 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/