更改通道数量/转换 OpenCV Mat

问题描述 投票:0回答:1

因此,我尝试截取桌面屏幕截图,然后使用 imread() 导入模板图像并在 matchTemplate() 中使用它们。

我导入的模板类型是CV_8UC3。

为了截取屏幕截图并将其转换为 Mat,我使用 this post 中的函数(来自 40 多个赞成票的答案),该函数输出类型为 CV_8UC4 的 Mat。

但是 matchTemplate() 仅当源图像和模板具有相同类型时才有效。

所以我需要将模板的通道数增加 1 或将屏幕截图的通道数减少 1。

当我尝试将屏幕截图功能中创建的 Mat 的类型(位于

src.create(height,width,CV_8UC4);
)更改为 CV_8UC4 以外的任何类型时,它只是停止工作并输出空白图像。当我使用 reshape() 将模板的通道数设置为 4 时,图像就消失了。当我使用 reshape() 将屏幕截图的通道数设置为 3 时,会发生这种情况:

原图:https://imgur.com/a/gVmkjG2

重塑为 3 个通道:https://imgur.com/a/Ut16NPx

我没有主意了:/

c++ image opencv image-processing mat
1个回答
0
投票

Dan Mašek 在评论中给出了正确答案并要求自我回答:

所以放弃alpha通道(使用cvtColor。考虑到它是一个屏幕截图,透明度可能无论如何都没用......重塑真的没有意义。

© www.soinside.com 2019 - 2024. All rights reserved.