gpt4 book ai didi

c++ - cv::circle 的奇怪行为

转载 作者:行者123 更新时间:2023-11-28 02:15:59 24 4
gpt4 key购买 nike

我正在尝试使用 OpenCV 3 在从 Kinect v2 传感器获得的图像上绘制几个圆圈。

cv::circle 似乎有一个奇怪的错误,或者我不明白这个函数是如何工作的。让我们看一些代码:

if(kinectDataManager.IsColorStreamEnabled())
{
cv::Mat colorFrameMat = kinectDataManager.GetFrame().GetColorFrame()

cv::imshow("Color", colorFrameMat)
}

此代码运行良好,使用 ImageWatch Visual Studio 插件检查 OpenCV 图像,我可以看到 colorFrameMat 矩阵没有损坏。

让我们再看一些代码:

if(kinectDataManager.IsColorStreamEnabled())
{
cv::Mat colorFrameMat = kinectDataManager.GetFrame().GetColorFrame()

int radius = 2;
int y = 1068;

for (int x = 0; x < 1920; ++x)
{
cv::circle(colorFrameMat, cv::Point(x,y), radius, cv::Scalar(255, 0, 0), -1, CV_AA);
}

cv::imshow("Color", colorFrameMat)
}

循环执行完成后,ImageWatch 插件显示图像的最后几行丢失了。奇怪的是,程序还在执行。但是,对于不同的 y 值,程序会由于访问冲突而崩溃,例如对于 y = 1067,程序在 x = 1917 时崩溃。对于 y = 1069,它会在 x = 988 处崩溃。

有人知道问题出在哪里吗?

编辑:ImageWatch 插件当然会显示最后一行丢失了,因为在这些位置从左到右绘制了圆圈,对错误感到抱歉!!

编辑2:存储一帧并读入后,具有相同代码的 cv::circle 方法工作正常:

cv::Mat test = cv::imread("test.jpg", CV_LOAD_IMAGE_COLOR);
cv::namedWindow("test", CV_WINDOW_NORMAL);
int radius = 10;
int y = 1067;

for (int x = 0; x < 1920; ++x)
{
cv::circle(test, cv::Point(x, y), radius, cv::Scalar(0, 0, 255, 255), -1, CV_AA);
}

cv::imshow("test", test);
cv::waitKey(0);

最佳答案

Kinect SDK 仅提供读取 4 channel 图像(即 RGBA)的功能,但是,cv::circle 函数似乎以一种奇怪的方式崩溃以处理此类图像。通过调用 cvtImage 删除 alpha channel ,我可以解决这个问题。

关于c++ - cv::circle 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34018514/

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