OpenCV:将 3 通道图像转换为 4 通道图像
OpenCV: transforming 3 channel image into 4 channel
>我正在尝试将 3 通道图像更改为 4 通道图像,如下所示:
cv::VideoCapture video;
video.open("sample.avi");
cv::Mat source;
cv::Mat newSrc;
int from_to = { 0,0, 1,1, 2,2, 3,3 };
for ( int i = 0; i < 1000; i ++ )
{
video >> source;
cv::mixChannels ( source, 2, newSrc, 1, from_to, 4 );
}
然后我得到了
too many input arguments in function call
对于"混合通道"行。此外,我不确定我是否为我的目标提供了正确的论据。有人可以帮助我吗?谢谢。
您可以将 3 通道图像转换为 4 通道图像,如下所示:
cv::Mat source = cv::imread(path);
cv::Mat newSrc(source.size(), CV_MAKE_TYPE(source.depth(), 4));
int from_to[] = { 0,0, 1,1, 2,2, 2,3 };
cv::mixChannels(&source,1,&newSrc,1,from_to,4);
这样,通道 4 将是通道 3 的副本。通过在from_to
列表中使用负数,输出通道为零填充。例如:
int from_to[] = { 0,0, 1,1, 2,2, -1,3 };
第 4 个通道应该包含什么?怎么样:
VideoCapture cap(0);
Mat frame;
cap >> frame;
Mat RGBA(frame.size(), CV_8UC4, camData);
cv::cvtColor(frame, RGBA, CV_BGR2RGBA, 4);
我认为应该是这样的:
cv::Mat source = cv::imread(path);
cv::Mat newSrc = cv::Mat(source.rows,source.cols,CV_8UC4);
int from_to[] = { 0,0, 1,1, 2,2, 3,3 };
cv::mixChannels(&source,1,&newSrc,1,from_to, source.channels());
在 C++11 中,您可以使用初始值设定项列表为内联批量转换提供多个矩阵:
cv::mixChannels({{source}}, {{newSrc}}, from_to, source.channels());
我们设置了 3 对要复制,因此这在 newsrc 中留下了 4 个通道为空。第二个和第四个参数中的 1 表示指针源和 newSrc 指向一个要处理的元素。最后一个参数给出from_to的长度。
相关文章:
- 在RAW图像中提取RGB通道值的库或方法
- 有没有办法使用 glDrawPixel 渲染单通道灰度图像?
- 与 alpha 通道的图像重叠在 QT 上不起作用
- 带有多通道内核的图像卷积
- 在未填充为 4 字节的 3 通道上进行图像重采样
- 我可以将从相机获取的单通道图像输出到 winAppi 窗口中吗?
- 想要从图像获取绿色 RGB 通道时出错
- 使用 cuda 将通道与 RGBA 图像分离(无法显示完整图像)
- OpenCV:将 3 通道图像转换为 4 通道图像
- 将 16 位单通道图像写入 Tiff
- 如何判断万智牌::图像是否具有阿尔法通道
- 在 CToolBar (MFC) 上具有 Alpha 通道的 32 位图像
- 图像深度和通道之间的差异
- 我可以在3个通道的图像中只平滑1个通道吗
- 将拜耳图像分离到彩色通道c++
- 叠加在4通道图像上
- 在Blackberry 10 Cascades中,有一种方法可以使用图像掩码或alpha通道更改Blackberry C
- OpenGL将原始图像转换为红色通道
- 如何在opencv中创建和初始化带有alpha通道的图像
- ImageMagick c++ API获取图像通道