Questions tagged «opencv»

OpenCV(开源计算机视觉)是用于实时计算机视觉的编程功能的跨平台库。

7
在图像中找到正方形
我需要使用OpenCV在图像中找到正方形(在matlab或其他任何问题上都没问题,通常我期望的是一些想法)。 考虑下面的测试图像: 我需要在上面的图像中准确找到那些彩色的正方形(而不是白色的长条)。 我做了什么 : 我应用了通用方法(OpenCV样本随附),即在所有颜色平面中找到轮廓,对其进行近似并检查元素数= 4。它在某种程度上可以检测到很少的正方形,尤其是暗的正方形。 我要做的下一步是预测。即这种安排是固定的。因此,如果获得一些,我可以预测剩余的。它还可以进一步扩展。但是准确性非常差。 但是我觉得这里的预测不是一个好方法,并且它并不总是提供第一步所给出的准确答案。 我需要的 : 1)还有其他更好的方法可以更准确地检测这些正方形吗?还是多种方法? 重要的一点是,时间在这里不是问题。算法可能很慢,没关系。但是准确性是主要标准。 有时,图像可能更加模糊。 我面临的主要问题之一是某些正方形的颜色与背景颜色几乎相似(请检查第3列的第一和第二个正方形)。 寻找想法,在此先感谢 更新: 以下是我得到的最大准确结果: 当然,结果图像的大小会有所调整。 更新2: 我在下面的答案中给出了更好的解决方案:https : //dsp.stackexchange.com/a/7526/818

1
哈里斯角点检测的数学
该问题是从Stack Overflow 迁移而来的,因为可以在Signal Processing Stack Exchange上回答。 迁移 7年前。 这是哈里斯角点检测的数学表达式: 但是我有以下疑问: 和v的物理意义是什么?许多参考文献说,这是窗口w移动的幅度。那么窗口移动了多少?一个或两个像素?uuuvvvwww 窗口覆盖的像素位置上的总和是吗? 假设简单地,我(X ,ÿ )是在单个像素的强度(X ,ÿ )或在中心的窗口内的强度的总和(X ,ÿ )?w(x,y)=1w(x,y)=1w(x,y) = 1I(x,y)I(x,y)I(x,y)(x,y)(x,y)(x,y)(x,y)(x,y)(x,y) 根据Wiki,他们说图像是2D,用I表示,然后要求考虑区域,然后使用符号I (x ,y )(x,y)(x,y)(x,y)I(x,y)I(x,y)I(x,y) 我发现难以掌握数学解释。有人有主意吗?


2
如何识别桌游中的六角形拼贴?
我想识别照片中六角形拼贴的边界,如下图所示: 在我看来,在正方形网格上的一种标准方法是首先检测角(例如Canny),然后通过霍夫变换或类似方法提取最长的线。 这看起来不是十六进制平铺的最佳解决方案,因为外线的长度较短,并且很难将其与其他线分开。 有解决这个问题的算法吗?在opencv中有解决方案会特别好,但是我也对一般想法感兴趣。 更新: 使用python和opencv我可以收到以下结果: 这是我的代码: import cv2 import numpy as np imgOrig = "test1"; img = cv2.imread(imgOrig+".jpg"); lap = cv2.Laplacian(img, cv2.IPL_DEPTH_32F, ksize = 3) imgray = cv2.cvtColor(lap,cv2.COLOR_BGR2GRAY) ret,thresh = cv2.threshold(imgray,127,255,0) contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE) size = img.shape m = np.zeros(size, dtype=np.uint8) for i, cnt in enumerate(contours): if cv2.contourArea(cnt) …

4
上面的人检测
我试图找到一种方法,仅使用距离地面3米的一台摄像机来检测人员。这是相机返回的帧: 更新:视频测试-> http://dl.dropbox.com/u/5576334/top_head_shadow.avi 为了做到这一点,首先我了解我必须执行背景-前景分割。那是容易的部分。 使用前景蒙版,我可以进行简单的操作(例如霍夫变换)来查找圆,但是这种方式只能检测出60%的头部,包括许多误报。 我可以使用其他一些简单的技术,例如颜色分割,但是我发现人头与上面的人非常不同,因为他们的发型,颜色,头发数量,... 尽管我还有其他选择,可以使用HOG描述符或类似Haar的功能,但是我需要一个从上面看到的人的广泛数据库来训练模型。我还没有找到类似的东西。 我以为这将是一个经常发生的问题,但是我在文学或互联网上找不到很多。解决此任务的任何帮助将不胜感激:-) 更新:有关更多信息,目标是实施一些通用方法来进行行人流量跟踪。第一个原型将在购物中心进行测试。

4
如何获得最准确的相机校准?
首先,我希望这是正确的Stack Exchange开发板。如果没有,我深表歉意。 我正在做一些需要校准相机的事情。我已经在OpenCV(C ++)中成功实现了执行此操作的代码。我正在使用内置的棋盘功能和已打印的棋盘。 互联网上有许多教程,其中给出了多个国际象棋棋盘视图,并从每个帧中提取角点。 是否有一组最佳视图可赋予该功能以获得最准确的相机校准?什么会影响校准的准确性? 例如,如果我给它5张相同视图的图像而没有移动任何东西,当我尝试不扭曲网络摄像头时,它会给出一些直接的结果。 仅供参考,任何来访的人:我最近发现,使用不对称圆圈网格和相应的OpenCV函数,可以更好地校准相机。

6
不同材质的图像分割问题
嗨,简历/模式识别社区, 关于图像的分割,我遇到了一个严重的问题。场景是炉子里的气氛,使我发疯。而且我需要在短时间内(<10秒)而不是仅在一种特殊情况下检测不同材料(玻璃,陶瓷,Al,Ir ...)的物体轮廓。我还需要代码的连续像素行中的轮廓。因此,还需要使用链代码或所谓的边界/轮廓跟随,因此开孔不好。在背景中会不时出现非线性噪声,大约是灰尘,颗粒或其他一些东西。 欢迎使用Matlab或OpenCV建议。 为了更加清楚,我发布了目标的另一个图像和一个半透明的对象,还需要对其进行检测。还需要注意其他示例。 正如您在图像#1中看到的那样,图像的右侧部分和恒星的外轮廓附近(即物体)存在粒子。而且总体对比度不是很好。对象本身位于地下,与轮廓检测无关。图像#2显示了半透明的物体,这也是可能的。 我想找到该物体的轮廓/周长,就像在下一个屏幕(红线)上一样。两个矩形(黄色)标记了起点(左侧)和终点(右侧)。蓝线是可忽略的。 起初我以为我可以只用过滤器解决那种肮脏的气氛。但是经过大量的投入时间,我才意识到,为了提高前景和背景的对比度,我必须大幅度消除或减少噪音。我尝试了很多方法,例如直方图均衡,自适应Otsu均衡,线性滤波器(例如高斯),非线性滤波器(中值,扩散),活动轮廓,k均值,Fuzzy-c-means以及纯Canny边缘检测结合形态运算符。 坎尼:粒子和大气正在造成孔洞,但是我需要物体的完整轮廓。仍然以形态算子的闭合,扩张还不够好。由于滞后作用,Canny仍然是我研究过的所有方法中最好的结果。 活动轮廓线:它们也可以在边缘/渐变上工作,在对象内部初始化后它们的行为完全疯狂,这可能是由于边缘贴图导致“开放”对象引起的。据我所知,轮廓必须闭合。尝试了不同的衍生产品(GVF / VFC /经典蛇)。 k均值:由于有雾的背景,结果包括炉内气氛。对于模糊C均值也是如此。由于将对象与背景分离,我选择了两个群集。簇越多,结果越弱。 直方图/ Otsu:由于灰度强度非常接近(恕我直言!),它会将对象与背景合并。尝试使用本地和全局方法。 滤镜:尤其是GLPF或其他LPF会弄脏边缘,效果不是很好,甚至不会减少有雾的气氛。 非线性滤镜保留边缘。它们中的大多数都花很长时间计算大图像。现在使用快速双边过滤器。结果见下文。 因此,没有一种方法足以满足后处理步骤的需要,因为对象段的获得结果与现有算法的竞争性较差。该现有算法非常本地化,因此适用于这种非常特殊的情况。 所以我问你,如果我完全错过了什么...我不知道如何加工以及如何获得良好的轮廓结果而又没有间隙或孔。 CCD和物理环境?提前致谢! 到目前为止的最后一种方法(经过一整夜的MO实验): 双边过滤器(保留边缘,但平滑均匀区域) Canny(Sigma = 2,Threshold = [0.04 0.08]) 形态运算(MO): bwareopenclosing, remove和bridge bwlabel仅选择轮廓的周长,以消除不必要的噪音。尚无更新的屏幕截图,但适用于明星。玻璃杯有一个与外部轮廓相连的内部轮廓,也可以在下面的屏幕截图中看到。 因此,恐怕我需要一种特殊的算法来遍历外部轮廓。这将是对邻居的一些顺时针/逆时针查找。如果存在拐角,则可以切换顺时针/逆时针的步骤。如果有间隙,请增加半径并再次查看。如果存在以下两个或两个以上的观点,请选择与前一个观点相同的观点。您认为轮廓跟随算法有意义吗?

3
OpenCV / C ++根据它们之间的距离连接附近的轮廓
我必须根据它们之间的距离连接图像中的附近轮廓,该距离指定是否要连接轮廓。 现在这里已经有一个关于同一问题的问题,https://stackoverflow.com/questions/8973017/opencv-c-obj-c-connect-nearby-contours,但是在这里他将所有轮廓合并为一个轮廓。这个我不要 我认为opencv中没有为此功能,但是您可以为此建议一个算法。我的应用程序如下所示: 我正在检测手,因此我使用皮肤检测算法来确定它们,但是由于我的皮肤不是白色,可能是由于某些情况下的照亮情况导致肘部轮廓破裂。因此,我希望连接附近的轮廓,但不要全部连接(因为我的两只手都在轮廓中。)(我的意思是从肩膀到手掌。) 此外,我认为通过使用一些边缘检测,我将获得我的手的边界,并检测该边界内的某些补丁是否被检测为皮肤,然后将该边界内的整个区域检测为皮肤,但是我不确定如何执行此操作部分。 任何帮助将不胜感激。提前致谢 样本图片: 在此图像中,我想连接距离(小于40像素)的点(8个连接点),以便将左手作为单个轮廓 我的目的是只获得手的轮廓(我不在乎其他任何区域)

3
如何从同形矩阵计算相机姿态?
假设我只使用一台校准相机。从这台摄像机,我得到图像A和B。我知道A和B之间的单应性,这是通过OpenCV的findHomography()计算得出的。 我知道图像A的姿态(旋转矩阵R和平移矢量t),并且我需要图像B的姿态。一旦获得它,我想我将能够计算后续图像的每一个进一步的姿态。 您知道计算B的姿势的实现吗?我在网上找到了几篇文章,但找不到易于实施的解决方案...

4
从书架图像中切片和识别书名和作者
出于我自己的学习目的,我正在尝试开发一种算法,该算法将列出书,并给出如下书架的图像: 第一步是将图像切成单独的书。 我在Mathematica中的算法是: img = ColorConvert[Import["http://i.stack.imgur.com/IaLQk.jpg"], "GrayScale"] 做一个基本的边缘检测和 删除文本并尝试保持长行 edge = DeleteSmallComponents[EdgeDetect[img, 3],Last[ImageDimensions[img]]/5] 然后删除不需要的水平线 lines = Sort[ImageLines[img5] /. {{0., _}, {_, _}} -> Sequence[]] Show[img, Graphics[{Thick, Orange, Line /@ lines}]] 但是结果却不尽人意: 我的问题是: 我该如何改善它以获得更好的结果? 有更聪明的方法吗? 我应该进一步处理图像以提高(后期)OCR阶段的准确性吗? 如何使用颜色信息改善分割效果?

2
根据检测到的线计算单应性
我知道您可以使用“完美模型”和图像点之间的对应点来计算图像到相机平面的单应性。 我正在为足球场/场地做这件事,并且使用边缘检测来找到球场中的白线。 但是相机不会(总是)覆盖所有的俯仰,所以我看不到所有的角...而且我只有角是模型中100%的已知点(没有其他可分辨的点)。 因此,问题在于,除非这条线与另一条线相交并形成一个角,否则我只会知道该线的图像点,而不是模型中相应的“完美/真实世界”坐标。 我有什么方法可以使用检测到的线来计算单应性,甚至只是一组候选单应性,即使检测到的线彼此不相交并创建拐角? 示例图像,显示了俯仰,我们的视野以及可以知道相应的真实世界/模型坐标(绿色圆圈)的俯仰点,以及2条直线的示例,由于在我们的视野中,它们可能完全没有用,我不知道他们在音高对应的真实世界/模型中确切在哪一点开始或停止: 红线是我要使用的线的示例,但我不知道它们的真实坐标,并且很难估计它们,因为根据相机的姿势,对应点可能在“任何地方”。

4
比例和旋转不变模板匹配
我正在寻找缩放和旋转不变模板匹配的方法。我已经尝试过一些,但是对于我的示例来说,它们并没有那么好用,或者永远无法执行。SIFT和SURF特征检测完全失败。我还尝试实现Log-Polar模板匹配功能,但我从未完成(不知道确切的操作方法)。 在这些文章中(第一个是德语) http://cvpr.uni-muenster.de/teaching/ss08/seminarSS08/downloads/Wentker-Vortrag.pdf http://www.jprr.org/index.php/jprr/article/viewFile/355/148 我了解了该方法。绘制极坐标是可行的,但我不知道它是否正确。图片看起来像这样。 source_log_polar.png http://www.shareimages.com/images/pics/0/0/3/62394-pZSfl5WenZysnpyVnKg-source_log_polar.png 在用OpenCV的模板匹配功能匹配这两个图像后,我得到了结果 现在我不继续了。 我的模板始终是构建蓝图和蓝图本身的简单符号。这些符号的大小和方向可以不同。 例如我的简单蓝图: 还有我的模板 在此示例中,只有一个模板,但是在蓝图中,它应该找到所有出现的位置,甚至包括具有大小和/或方向的出现位置。 有谁有办法解决这个问题? 编辑: 对Andrey的方法的补充。径向轮廓的距离捕获算法。(使用EmguCV) private float[] getRadialProfile( Image<Gray, byte> image, Point center, int resolution ) { var roi = image.ROI; if ( !roi.Contains( center ) ) { return null; } var steps = resolution; var degreeSteps = 360 …

2
行人计数算法
目前,我正在开发一个行人计数器项目(在Linux上使用OpenCV + QT)。我对方法的想法是: 捕捉帧 做背景扣除 清除噪音(腐蚀,膨胀) 查找blob(cvBlobslib)-前景对象 为每个Blob设置ROI,并在这些Blob中搜索行人(LBP和detectMultiScale)(以获得更好的性能) 对每个发现的行人进行嵌套的上身搜索(不确定)(可靠性更高) 如果在连续的帧(可能是3-4帧)上发现了相同的行人-将该区域添加到camshift和跟踪中-标记为行人 从下一个帧的斑点检测中排除camshift跟踪的区域 如果行人越过行号 我想检查一下我是否走对了。您对如何改善我的方法有什么建议吗?如果有人从事类似的工作,我将不胜感激有关此问题的任何有用技巧,资源(和批评)。

1
从嘈杂的点集合中恢复曲线
背景:我正在尝试制作一个跟踪视频中大量气泡的系统 我正在使用循环霍夫变换在单图像情况下实现气泡检测。由于遮挡,模糊和其他因素,这种检测永远不会是100%准确的。我正在调整检测程序以提高召回率,可能是以精度为代价的。 完成此操作并将其应用于视频中的一系列帧后,我将获得许多可以表征为4D空间中的点的检测-x位置,y位置,半径和帧索引。 是否有可以从该4D点云恢复曲线的程序?

2
高斯,拉普拉斯和墨西哥帽小波之差有什么区别?
简历中使用了三种技术,它们看起来非常相似,但有细微的差别: 高斯的拉普拉斯算子:∇2[g(x ,y,t )∗ f(x ,y)]∇2[g(x,y,t)∗f(x,y)]\nabla^2\left[g(x,y,t)\ast f(x,y)\right] 高斯差异:[ 克1个(x ,y,t )∗ f(x ,y)] - [ g2(x ,y,t )∗ f(x ,y)][g1(x,y,t)∗f(x,y)]−[g2(x,y,t)∗f(x,y)] \left[g_1(x,y,t)\ast f(x,y)\right] - \left[g_2(x,y,t)\ast f(x,y)\right] 用Ricker小波进行卷积:里克(x ,y,t )∗ f(x ,y)Ricker(x,y,t)∗f(x,y)\textrm{Ricker}(x,y,t)\ast f(x,y) 据我目前了解:DoG是LoG的近似值。两者都用于斑点检测,并且两者本质上都充当带通滤波器。用墨西哥帽/里克小波进行卷积似乎可以达到几乎相同的效果。 我已将所有三种技术应用于脉冲信号(必须进行缩放以使幅度相似),结果非常接近。实际上,LoG和Ricker看起来几乎相同。我注意到的唯一真正的区别是使用DoG,我有2个免费的参数可以进行调整(和),而LoG和Ricker则为1。我还发现小波是最简单/最快的,因为它可以通过一次卷积(通过傅立叶空间乘以核的FT乘以完成)对DoG进行2次,对卷积进行卷积加Laplacian进行。 σ 1σ1个σ1\sigma_1σ1个σ1\sigma_1 每种技术的比较优点/缺点是什么? 有不同的用例,其中一个优于另一个吗? 我还凭直觉想到,在离散样本上,LoG和Ricker会退化为相同的操作,因为可以实现为内核 。[ - 1 ,2 ,- 1 ]∇2∇2\nabla^2[ − 1 ,2 ,− 1]要么⎡⎣⎢0− …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.