OpenCV+cvBlobsLib:blob 在 x 轴上"stretched"出来
OpenCV+cvBlobsLib: blobs come out "stretched" on the x-axis
使用OpenCV和cvblobslib制作通常的blob跟踪器,我遇到了这个问题,似乎没人有它,这让我很难过。我获得了RGB/BGR框架,选择隔离颜色,将其转换为b/w,找到斑点并在每个斑点上添加边界矩形,但是当我显示最终图像时,盒子在x轴上拉伸,:当对象位于左侧时,盒子靠近它(尽管大约2.5倍),并且随着其向右移动时,盒子移动的速度更快(=越来越远离对象),直到到达到达的右端对象甚至没有一半的窗口。这不会在Y轴上发生,一切都很好。这不是矩形的问题,当我使用fillblob aswell时,它会发生斑点形状伸展和错位。另外,这不是与图像捕获相关的问题,因为我尝试使用Kinect(OpenNi),网络摄像头,甚至使用单个图像(Imread(Imread()),我验证了每个图像生机器,垫子,使用的iPlimage均为640x480,8bit深度,我将其用于命名的Window(放大到全屏幕窗口也无济于事)。显示BGR框架和TreShold图像没有任何问题,它们都适合窗口,但是当我将它们与原始图像合并时,检测到的斑点似乎属于不同的分辨率空间。这是代码,与在线在线发现的通常示例相比,没有太大变化:
//[...]
namedWindow("Color Image", CV_WINDOW_AUTOSIZE);
namedWindow("Color Tracking", CV_WINDOW_AUTOSIZE);
//[...] I already got the two cv::Mat I need, imgBGR and imgTresh
CBlobResult blobs;
CBlob *currentBlob;
Point pt1, pt2;
Rect rect;
//had to do Mat to IplImage conversion, since cvBlobsLib doesn't like mats
IplImage iplTresh = imgTresh;
IplImage iplBGR = imgBGR;
blobs = CBlobResult(&iplTresh, NULL, 0);
blobs.Filter(blobs, B_EXCLUDE, CBlobGetArea(), B_LESS, 100);
int nBlobs = blobs.GetNumBlobs();
for (int i = 0; i < nBlobs; i++)
{
currentBlob = blobs.GetBlob(i);
rect = currentBlob->GetBoundingBox();
pt1.x = rect.x;
pt1.y = rect.y;
pt2.x = rect.x + rect.width;
pt2.y = rect.y + rect.height;
cvRectangle(&iplBGR, pt1, pt2, cvScalar(255, 255, 255, 0), 3, 8, 0);
}
//[...]
imshow("Color Image", imgBGR);
imshow("Color Tracking", imgTresh);
" [...]"是与此问题无关的代码,但是如果您需要有关我如何处理图像的更多信息,请告诉我。P>
基于我捕获图像的方式不会改变任何东西,BGR帧和B/W图像的显示很好,并且在获得斑点后,显示出任何显示它们的方式给出了相同的(错误)结果,问题必须是cblobresult()和matrix2ipl转换之间的问题,但我真的不知道如何找到它。
哦,天哪,我花了很长时间来写整个问题,第二天我几乎随意地找到答案。当我创建用于treshold的b/w矩阵时,我没有使其单渠道。我复制了BGR矩阵类型,因此具有3个通道的Treshold图像,导致框架宽度的宽度3倍。解决CV_8UC1作为类型创建CV :: MAT IMGTRESH。
- 如何修复艺术ASCII,我点击一个字母就可以了,但输入一个阶段艺术出来了
- 将浮点数转换为无符号字符数组并打印出来
- 如何让字符数组在一行而不是多行中打印出来?
- 我重载了 << 和 = 运算符。为什么当我将一个对象分配给另一个对象并尝试打印它时,我会被打印出来?
- 带有矢量重复值的二叉树打印出来
- 我的链表没有按预期打印出来?
- 为什么'Hello'与CPP中的'World'进行比较时被打印出来?
- 程序运行,但并非所有内容都显示出来
- 如何在循环中使用scanf,将值存储到一个变量中,然后打印出来?
- 将偶数和奇数随机数分离并打印出来
- 有没有办法在一段时间后将流程从流出中分离出来
- FFMPEG:为什么当我调用av_codec_next()时,我所有的编解码器都没有显示出来
- 如何使用Qt多媒体和C++将.mp4视频从OpenGL纹理中保存出来
- 如何基于一个数组对多个数组进行排序并打印出来
- 奇怪的消息 (_Base_bitset::_M_do_to_ulong) 从溢出异常处理程序中打印出来
- C++无法将对齐的字符串存储在字符串变量中并打印出来
- 在文件中生成随机数,然后从文件调用它们,然后将它们打印出来
- 多米诺骨牌计划。我不知道如何将我的矢量拉到空白中以打印出来
- 双精度未打印出来
- OpenCV+cvBlobsLib:blob 在 x 轴上"stretched"出来