c++ - 如何在设计时不知道图像类型时访问 cv::mat 中的数据?

标签 c++ opencv

我有一组输入图像和一个输出图像,我需要组合输入图像并创建输出图像。

我有这个代码:

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::Vec3bcv::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/

相关文章:

c++ - 是否有更多的输出缓冲区?

python - 在 boost::python::import ("cv2"上得到异常 boost::python::error_already_set )

c++ - 通过 c/c++ 中的 tcp 套接字发送时数据被切断

c++ - 如何使用 C++ 中的 OpenCV 以所需的 fps 捕获视频

image - 在图像上定位 "black rectangles"- 与语言无关

opencv - 使用opencv从视频进行面部和眼睛检测

c++ - 如何从 C++ 中的网络摄像头读取输入?

c++ - 在 C++ 中为 Conway 的生命游戏计算相邻单元格

python - 使用 Python 在 OpenCV 中存储

linux - 显着性模型 - BMS(设置错误)