gpt4 book ai didi

c++ - 如何将单个图像从图像 vector 复制到临时 cv::Mat?

转载 作者:太空狗 更新时间:2023-10-29 20:04:47 29 4
gpt4 key购买 nike

我调用函数 rgbTOgray 并尝试使用 for 循环将“图像 vector ”(这是彩色图像的 vector )中的每个图像复制到临时 cv::Mat。然后,使用 cvtColor 将其转换为灰度。这是代码:

std::vector<cv::Mat> rgbTOgray(std::vector<cv::Mat>& rgb_image)
{
cv::Mat temp_gray, temp_rgb;
std::vector<cv::Mat> gray_image;
std::vector<cv::Mat>::iterator itr;

for ( itr = rgb_image.begin() ; itr < rgb_image.end() ; itr++)
{
temp_rgb = *itr;
cvtColor(temp_rgb, temp_gray, CV_RGB2GRAY);
gray_image.push_back(temp_gray);
}

return gray_image;
}

编辑: 我正在返回一个灰度图像 vector “gray_image”。但这似乎不起作用。

EDIT_2:OpenCV 错误:cvtColor 断言失败(scn == 3 || scn == 4)

有人可以帮帮我吗?我是新手,正在学习所有这些东西。谢谢!

最佳答案

一个问题是您忘记了 cv::Mat 是使用“拷贝”进行引用计数的,并不是真正复制任何东西,只是一个指针。
push_back(temp_grey) 不断将相同的图像插入您的数组。
您应该在循环内声明 cv::Mat temp_gray 以确保您获得每个元素的新拷贝。

此外,检查“rgb”图像的 channel 数 (temp_rgb.channels())。断言基本上表示它们不是 3/4 channel 。

关于c++ - 如何将单个图像从图像 vector 复制到临时 cv::Mat?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16918246/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com