我有一组输入图像和一个输出图像,我需要组合输入图像并创建输出图像。
我有这个代码:
for (int j = 0; j < Height; ++j)
{
for (int i = 0; i < Width; ++i)
{
int xx,yy,Id;
algo.calXY(i, j, xx, yy,Id);
cv::Vec3b value=cubeImage.images[Id].at<cv::Vec3b>(yy,xx);
output.at<cv::Vec3b>(j,i)=value;
}
}
此代码仅在输入图像为无 alpha channel 的 RGB 时有效。
如果输入图像是 ARGB,我如何才能将其更改为正常工作?
我试图替换 cv::Vec3b
与 cv::Vec<uchar, output.channels>,
但它没有编译,因为它需要类型的编译时变量。
最佳答案
您可以通过一次复制一个 channel 来完成这项工作:
for (int j = 0; j < Height; ++j)
{
uchar* orow = output.ptr<uchar>(j);
for (int i = 0; i < Width; ++i)
{
int xx, yy, Id;
algo.calXY(i, j, xx, yy, Id);
//cv::Vec3b value=cubeImage.images[Id].at<cv::Vec3b>(yy,xx);
uchar* mrow = cubeImage.images[Id].ptr<uchar>(yy);
mrow += xx * output.channels();
// output.at<cv::Vec3b>(j,i)=value;
for(int c = 0; c < output.channels(); ++ c)
*orow++ = *mrow++;
}
}
关于c++ - 如何在设计时不知道图像类型时访问 cv::mat 中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25789650/