Questions tagged «opencv»

OpenCV(开源计算机视觉)是用于实时计算机视觉的库。使用此标签时,请提及您正在使用的OpenCV版本(例如3.4.6),并在需要时添加特定于语言的标签(python,c ++,...)。

24
图像处理:“可口可乐”识别的算法改进
我过去几年中最有趣的项目之一是关于图像处理的项目。目的是开发一个能够识别可口可乐“罐头”的系统(请注意,我强调的是“罐头”一词,稍后您会看到原因)。您可以在下面看到一个示例,该示例在带有刻度和旋转的绿色矩形中可以识别。 对项目的一些限制: 背景可能非常嘈杂。 该罐可以具有任何规模或旋转,甚至方向(在合理的限度内)。 图像可能有一定程度的模糊性(轮廓可能不完全笔直)。 图像中可能有可口可乐瓶,该算法只能检测到罐头! 图像的亮度可能相差很大(因此您不能“过多”依赖颜色检测)。 该罐可以部分地隐藏在两侧或中间,可能部分地隐藏了一瓶后面。 有可能是没有能在所有的图像中,在这种情况下,你必须找到什么,写一条消息这样说。 因此,您可能会遇到如下棘手的事情(在这种情况下,我的算法完全失败了): 我前一段时间做了这个项目,并且做起来很有趣,并且实现得很好。以下是有关我的实现的一些详细信息: 语言:使用OpenCV库在C ++中完成。 预处理:对于图像预处理,即将图像转换为更原始的形式以提供给算法,我使用了两种方法: 将颜色域从RGB更改为HSV,并基于“红色”色调进行过滤,饱和度高于特定阈值以避免产生类似橙色的颜色,而对低值进行过滤以避免产生深色。最终结果是一个二进制的黑白图像,其中所有白色像素将代表与该阈值匹配的像素。显然,图像中仍然有很多废话,但这减少了必须处理的尺寸数。 使用中值滤波进行噪声滤波(获取所有邻居的中值像素值,然后用该值替换像素)以减少噪声。 经过2个先验步骤后,使用Canny Edge Detection滤镜获取所有项目的轮廓。 算法:我为此任务选择的算法本身取材于这本很棒的书中有关特征提取的书,并称为通用霍夫变换(与常规霍夫变换完全不同)。它基本上说了几件事: 您可以在不知道其解析方程的情况下描述空间物体(此处就是这种情况)。 它可以抵抗缩放和旋转等图像变形,因为它将基本上测试图像的缩放因子和旋转因子的每种组合。 它使用算法将“学习”的基本模型(模板)。 轮廓图像中剩余的每个像素将投票给另一个像素,根据它从模型中学到的信息,该像素应该是对象的中心(就重力而言)。 最后,您将获得投票的热图,例如,此处罐头轮廓的所有像素都将为其重力中心投票,因此在与像素相对应的同一像素中将有很多投票居中,将会在热图中看到一个峰值,如下所示: 有了这些功能后,您就可以使用简单的基于阈值的启发式方法来确定中心像素的位置,从中可以得出比例尺和旋转角度,然后在其周围绘制一个小矩形(最终比例尺和旋转系数显然相对于您的原始模板)。理论上至少... 结果:现在,尽管此方法在基本情况下可行,但在某些领域却严重缺乏: 这是非常慢!我的压力还不够。处理30张测试图像几乎需要整整一天的时间,这显然是因为我对旋转和平移具有非常高的缩放系数,因为某些罐非常小。 当瓶子出现在图像中时,它完全丢失了,并且出于某种原因几乎总是找到瓶子而不是罐子(也许是因为瓶子更大,因此像素更多,投票更多) 模糊图像也不是很好,因为投票最终以像素为中心围绕中心的随机位置,从而以非常嘈杂的热图结束。 实现了平移和旋转的不变性,但没有实现定向,这意味着未识别未直接面对相机物镜的罐子。 您是否可以使用专有的OpenCV功能帮助我改善特定算法,以解决上述四个特定问题? 我希望有些人也能从中学到一些东西,毕竟我认为不仅提出问题的人也应该学习。:)

10
如何检测圣诞树?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 去年关闭。 可以使用哪些图像处理技术来实现检测以下图像中显示的圣诞树的应用程序? 我正在寻找可以在所有这些图像上使用的解决方案。因此,需要训练haar级联分类器或模板匹配的方法不是很有趣。 我正在寻找可以使用任何编程语言编写的东西,只要它仅使用开源技术即可。该解决方案必须使用此问题上共享的图像进行测试。有6个输入图像,答案应显示每个图像的处理结果。最后,对于每个输出图像,必须绘制红线以包围检测到的树。 您将如何以编程方式检测这些图像中的树木?

3
OpenCV-Python中的简单数字识别OCR
我正在尝试在OpenCV-Python(cv2)中实现“数字识别OCR”。它仅用于学习目的。我想学习OpenCV中的KNearest和SVM功能。 我每个数字有100个样本(即图像)。我想和他们一起训练。 letter_recog.pyOpenCV示例附带一个示例。但是我仍然不知道如何使用它。我不了解样本,响应等内容。此外,它首先会加载txt文件,而我首先并不了解。 稍后进行搜索时,我可以在cpp样本中找到letter_recognitiontion.data。我用它并在letter_recog.py模型中为cv2.KNearest编写了一个代码(仅用于测试): import numpy as np import cv2 fn = 'letter-recognition.data' a = np.loadtxt(fn, np.float32, delimiter=',', converters={ 0 : lambda ch : ord(ch)-ord('A') }) samples, responses = a[:,1:], a[:,0] model = cv2.KNearest() retval = model.train(samples,responses) retval, results, neigh_resp, dists = model.find_nearest(samples, k = 10) print results.ravel() 它给了我一个大小为20000的数组,我不知道它是什么。 问题: …

16
使用OpenCV时找不到模块cv2
我已经在Raspberry Pi上的Occidentalis操作系统(Raspbian的变体)上安装了OpenCV,使用的是在此处找到的jayrambhia脚本。它安装了版本2.4.5。 当我尝试import cv2使用Python程序时,收到以下消息: pi@raspberrypi~$ python cam.py Traceback (most recent call last) File "cam.py", line 1, in <module> import cv2 ImportError: No module named cv2 该文件cv2.so存储在/usr/local/lib/python2.7/site-packages/... 在/usr/local/libpython3.2和python2.6 中也有文件夹,这可能是个问题,但我不确定。 这可能是路径错误吗?感谢您的任何帮助,我是Linux的新手。

8
如何使用Python在OpenCV中裁剪图像
我如何像以前在PIL中一样使用OpenCV裁剪图像。 PIL的工作示例 im = Image.open('0.png').convert('L') im = im.crop((1, 1, 98, 33)) im.save('_0.png') 但是我如何在OpenCV上做到这一点? 这是我尝试的: im = cv.imread('0.png', cv.CV_LOAD_IMAGE_GRAYSCALE) (thresh, im_bw) = cv.threshold(im, 128, 255, cv.THRESH_OTSU) im = cv.getRectSubPix(im_bw, (98, 33), (1, 1)) cv.imshow('Img', im) cv.waitKey(0) 但这是行不通的。 我认为我使用不正确getRectSubPix。如果是这种情况,请说明如何正确使用此功能。
233 python  opencv 

30
如何通过Conda安装Python OpenCV?
我正在尝试通过Anaconda安装适用于Python的OpenCV ,但似乎无法弄清楚。 我试过了 conda install opencv conda install cv2 我也尝试搜寻 conda search cv 没有雪茄。我遇到了这个清单opencv,其中包含一个包: http://docs.continuum.io/anaconda/pkgs.html 运行后,conda info我注意到我的版本是3.4.1,但是我似乎无法在线找到有关此版本的任何信息。我对此很困惑。 我是否在这里遗漏了一些明显的东西?如果opencv以前的Anaconda版本可用,那么为什么新版本不可用?为什么该链接仅向我显示1.9.2版的文档?
229 python  opencv  anaconda  conda 


7
简单快速的图像相似度比较方法
我需要一种简单快速的方法来比较两个图像的相似性。也就是说,如果它们包含完全相同的内容,但背景可能略有不同,并且可能会移动/调整几个像素,则我希望获得较高的值。 (更具体的说,这很重要:一张图片是图标,另一张图片是屏幕截图的子区域,我想知道该子区域是否恰好是图标。) 我手头有OpenCV,但我仍然不习惯。 到目前为止,我考虑过的一种可能性是:将两张图片分成10x10个单元格,然后针对这100个单元格中的每一个,比较颜色直方图。然后,我可以设置一些虚构的阈值,如果我得到的值高于该阈值,那么我认为它们是相似的。 我还没有尝试过这种方法,但是我想它已经足够了。这些图像已经非常相似(在我的用例中),因此我可以使用很高的阈值。 我猜有很多其他可行的解决方案,它们或多或少都可以工作(因为任务本身非常简单,我只想在相似性非常高的情况下才检测相似性)。你有什么建议? 关于从图像中获取签名/指纹/哈希,存在一些非常相关/相似的问题: OpenCV / SURF如何从描述符中生成图像哈希/指纹/签名? 图像指纹以比较许多图像的相似性 几乎重复的图像检测 OpenCV:指纹图像并与数据库比较。 更多,更多,更多,更多,更多,更多,更多 另外,我偶然发现了这些实现具有指纹功能的实现: 酸碱度 imgSeek(GitHub repo)(GPL)基于论文快速多分辨率图像查询 图像匹配。与我要搜索的内容非常相似。与pHash相似,Goldberg等人基于对任何类型图像的图像签名。使用Python和Elasticsearch。 智商数据库 ImageHash。支持pHash。 映像重复数据删除器(imagededup)。支持CNN,PHash,DHash,WHash,AHash。 关于感知图像哈希的一些讨论:这里 有点题外话:存在许多创建音频指纹的方法。MusicBrainz是一项提供基于指纹的歌曲查找功能的网络服务,其Wiki中有很好的概述。他们现在正在使用AcoustID。这是用于查找完全一致(或几乎完全一致)的匹配项。要查找类似的匹配项(或者如果您仅有一些片段或高噪音),请查看Echoprint。一个相关的SO问题在这里。因此,似乎音频已解决。所有这些解决方案都运行良好。 关于模糊搜索的一般问题在这里出现。例如,存在局部敏感的哈希和最近邻居搜索。

6
如何消除数独方块中的凸度缺陷?
我当时在做一个有趣的项目:使用OpenCV(如Google护目镜等)从输入图像中解决数独问题。我已经完成了任务,但是最后我遇到了一个小问题。 我使用OpenCV 2.3.1的Python API进行了编程。 以下是我所做的: 读取图像 找到轮廓 选择面积最大的那个(也有些等同于正方形的那个)。 找到拐角点。 例如下面给出: (请注意,绿线正确地与数独的真实边界重合,因此数独可以正确变形。请检查下一张图片) 使图像变形为完美的正方形 例如图片: 执行OCR(为此我使用了我在OpenCV-Python的简单数字识别OCR中给出的方法) 而且该方法效果很好。 问题: 退房 这张图片。 在此图像上执行步骤4会得到以下结果: 画出的红线是原始轮廓,是数独边界的真实轮廓。 画出的绿线是近似轮廓,它将是变形图像的轮廓。 数独顶部的绿线和红线之间当然有区别。因此,在扭曲时,我并没有获得数独的原始边界。 我的问题 : 如何在数独的正确边界(即红线)上扭曲图像,或者如何消除红线和绿线之间的差异?OpenCV中有什么方法吗?

6
OpenCV C ++ / Obj-C:检测一张纸/正方形检测
我在测试应用程序中成功实现了OpenCV平方检测示例,但现在需要过滤输出,因为它很乱-还是我的代码错误? 我感兴趣的纸歪斜减少(如的四个角点是),并进一步处理... 输入输出: 原始图片: 点击 码: double angle( cv::Point pt1, cv::Point pt2, cv::Point pt0 ) { double dx1 = pt1.x - pt0.x; double dy1 = pt1.y - pt0.y; double dx2 = pt2.x - pt0.x; double dy2 = pt2.y - pt0.y; return (dx1*dx2 + dy1*dy2)/sqrt((dx1*dx1 + dy1*dy1)*(dx2*dx2 + dy2*dy2) + 1e-10); …

2
OpenCV –未校准立体声系统的深度图
我正在尝试使用未经校准的方法获得深度图。我可以通过使用SIFT查找对应点然后使用来获得基本矩阵cv2.findFundamentalMat。然后cv2.stereoRectifyUncalibrated,我用于获取每个图像的单应性矩阵。最后,我使用它cv2.warpPerspective来校正和计算视差,但这并不能创建良好的深度图。值非常高,所以我想知道是否必须使用warpPerspective或是否必须根据所获得的单应性矩阵计算旋转矩阵stereoRectifyUncalibrated。 我不确定投影矩阵是否与通过校正得到的单应矩阵有关stereoRectifyUncalibrated。 代码的一部分: #Obtainment of the correspondent point with SIFT sift = cv2.SIFT() ###find the keypoints and descriptors with SIFT kp1, des1 = sift.detectAndCompute(dst1,None) kp2, des2 = sift.detectAndCompute(dst2,None) ###FLANN parameters FLANN_INDEX_KDTREE = 0 index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5) search_params = dict(checks=50) flann = cv2.FlannBasedMatcher(index_params,search_params) matches = flann.knnMatch(des1,des2,k=2) …

5
如何使用OpenCV2.0和Python2.6调整图像大小
我想使用OpenCV2.0和Python2.6显示调整大小的图像。我在http://opencv.willowgarage.com/documentation/python/cookbook.html上使用并采用了该示例,但是不幸的是,该代码是针对OpenCV2.1的,并且似乎不适用于2.0。这是我的代码: import os, glob import cv ulpath = "exampleshq/" for infile in glob.glob( os.path.join(ulpath, "*.jpg") ): im = cv.LoadImage(infile) thumbnail = cv.CreateMat(im.rows/10, im.cols/10, cv.CV_8UC3) cv.Resize(im, thumbnail) cv.NamedWindow(infile) cv.ShowImage(infile, thumbnail) cv.WaitKey(0) cv.DestroyWindow(name) 由于我不能使用 cv.LoadImageM 我用了 cv.LoadImage 而是在其他应用程序中没有问题。但是,cv.iplimage没有属性行,列或大小。谁能给我一个提示,如何解决这个问题?谢谢。

9
提取文本OpenCV
我试图在图像中找到文本的边界框,并且目前正在使用这种方法: // calculate the local variances of the grayscale image Mat t_mean, t_mean_2; Mat grayF; outImg_gray.convertTo(grayF, CV_32F); int winSize = 35; blur(grayF, t_mean, cv::Size(winSize,winSize)); blur(grayF.mul(grayF), t_mean_2, cv::Size(winSize,winSize)); Mat varMat = t_mean_2 - t_mean.mul(t_mean); varMat.convertTo(varMat, CV_8U); // threshold the high variance regions Mat varMatRegions = varMat > 100; 当给出这样的图像时: 然后当我显示varMatRegions我得到此图像: 如您所见,它在某种程度上将文本的左侧部分与卡的标题结合在一起,对于大多数卡而言,此方法效果很好,但在繁忙的卡上会引起问题。 …

7
Android Studio中的OpenCV
我想在Android Studio的应用程序中使用OpenCV库。我遵循此处找到的说明,但出现错误 找不到名称为“默认”的配置 有什么事吗 我将Android Studio 1.0与gradle 2.2.1一起使用。

4
如何评估OpenCV的两个图像有多相似?
OpenCV是否支持比较两个图像,并返回一些值(可能是百分比)来指示这些图像的相似程度?例如,如果同一张图像通过两次,将返回100%;如果图像完全不同,则将返回0%。 我已经在StackOverflow上阅读了很多类似的主题。我也做了一些谷歌搜索。可悲的是,我无法给出令人满意的答案。

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.