Questions tagged «opencv»

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

2
cv2.Rodrigues计算期间的Python结果更改
如果我运行: import numpy as np import cv2 def changes(): rmat=np.eye(4) tvec=np.zeros(3) (rvec, jacobian)=cv2.Rodrigues(rmat) print rvec for i in range(2): changes() 我得到: [[6.92798859e-310] [2.19380404e-316] [1.58101007e-322]] [[0.] [0.] [0.]] 所以changes()变化的结果。 我不明白为什么会这样,而且如果tvec=np.zeros(3)注释掉该行,它就会停止更改 ,这让我觉得这是系统中的错误。

3
如何使用OpenCV获取数独网格的单元格?
最近几天,我一直在尝试从图片中获取数独网格,而我一直在努力获取网格的较小正方形。我正在处理下面的图片。我以为用Canny滤镜处理图像会很好,但是没有,而且我无法获得每个正方形的每个轮廓。然后,我将自适应阈值,otsu和经典阈值放入测试中,但是每次似乎都无法捕捉到每个小方块。 最终目标是获取包含数字的单元格,并使用pytorch识别数字,因此我真的很想获得一些清晰的数字图像,以使识别不会出错:) 有人会对如何实现这一目标有想法吗?在此先多谢!:D

1
您可以将OpenCVsolvePNP与等角矩形图像一起使用吗?
是否可以将OpenCV的solvePNP与等矩形图像一起使用?我有一个等边的图像,并且在此图像中有四个点(红色点)及其像素坐标,然后我有四个对应的世界点,例如,[(0, 0, 0), (2, 0, 0), (2, 10, 0), (0, 10, 0)]如何估计相机的姿势? 我尝试使用OpenCV,solvePnp但由于它期望使用Brown相机模型,因此无法正常工作。球形摄像机可以做到吗?

2
检测图像中的多个矩形
我试图检测这张图片中的管道数。为此,我正在使用OpenCV和基于Python的检测。根据对类似问题的现有答案,我能够提出以下步骤 打开图片 筛选 应用边缘检测 使用轮廓 检查计数 当我们手动给定或取4时,管道的总数约为909。 应用滤镜后 import cv2 import matplotlib.pyplot as plt import numpy as np img = cv2.imread('images/input-rectpipe-1.jpg') blur_hor = cv2.filter2D(img[:, :, 0], cv2.CV_32F, kernel=np.ones((11,1,1), np.float32)/11.0, borderType=cv2.BORDER_CONSTANT) blur_vert = cv2.filter2D(img[:, :, 0], cv2.CV_32F, kernel=np.ones((1,11,1), np.float32)/11.0, borderType=cv2.BORDER_CONSTANT) mask = ((img[:,:,0]>blur_hor*1.2) | (img[:,:,0]>blur_vert*1.2)).astype(np.uint8)*255 我得到了这张蒙面的图像 就显示的可见矩形数量而言,这看起来相当准确。但是,当我尝试进行计数并在图片顶部绘制边框时,它也会选择很多不需要的区域。对于圆,HoughCircles具有定义最大和最小半径的方法。矩形是否有类似的东西可以提高精度。另外,我也乐于接受有关此问题的替代方法的建议。 ret,thresh = cv2.threshold(mask,127,255,0) contours,hierarchy …

3
开放式简历人脸识别不准确
在我的应用程序中,我尝试使用Open CV在特定图像上进行人脸识别,这里我首先训练一个图像,然后在训练该图像后,如果我在该图像上进行人脸识别,则它成功地识别出该训练过的人脸。但是,当我转向同一个人的另一张照片时,识别不起作用。它仅适用于经过训练的图像,所以我的问题是如何纠正它? 更新:我要做的是用户应该从存储中选择一个人的图像,然后在训练了所选图像之后,我想从存储中获取与我训练过的图像相匹配的所有图像。 这是我的活动课: public class MainActivity extends AppCompatActivity { private Mat rgba,gray; private CascadeClassifier classifier; private MatOfRect faces; private ArrayList<Mat> images; private ArrayList<String> imagesLabels; private Storage local; ImageView mimage; Button prev,next; ArrayList<Integer> imgs; private int label[] = new int[1]; private double predict[] = new double[1]; Integer pos = 0; …

3
使用YOLO或其他图像识别技术来识别图像中存在的所有字母数字文本
我有多个图像图,所有图像图都包含字母数字字符标签,而不仅仅是文本标签本身。我希望我的YOLO模型能够识别其中存在的所有数字和字母数字字符。 我该如何训练我的YOLO模型做同样的事情。数据集可以在这里找到。https://drive.google.com/open?id=1iEkGcreFaBIJqUdAADDXJbUrSj99bvoi 例如:请参阅边界框。我希望YOLO可以检测出文本的任何位置。但是,当前无需识别其中的文本。 这些类型的图像也需要做同样的事情 图像可以在这里下载 这是我使用opencv尝试过的方法,但不适用于数据集中的所有图像。 import cv2 import numpy as np import pytesseract pytesseract.pytesseract.tesseract_cmd = r"C:\Users\HPO2KOR\AppData\Local\Tesseract-OCR\tesseract.exe" image = cv2.imread(r'C:\Users\HPO2KOR\Desktop\Work\venv\Patent\PARTICULATE DETECTOR\PD4.png') gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1] clean = thresh.copy() horizontal_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (15,1)) detect_horizontal = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, horizontal_kernel, iterations=2) cnts = cv2.findContours(detect_horizontal, cv2.RETR_EXTERNAL, …

4
如何提高在MNIST上训练的模型的数字识别能力?
我正在使用进行手印多位数识别Java,使用OpenCV库进行预处理和分割,并使用KerasMNIST训练的模型(精度为0.98)进行识别。 除了一件事之外,这种识别似乎效果很好。网络经常无法识别那些(数字“一”)。我不知道这是否是由于分割的预处理/不正确的实现而发生的,或者是否是在标准MNIST上训练的网络没有看到看起来像我的测试用例的第一名。 这是经过预处理和分割后出现问题的数字的样子: 成为并归类为4。 成为并归类为7。 成为并归类为4。等等... 通过改进细分过程,可以解决此问题吗?还是通过增强培训设置? 编辑:增强训练集(数据扩充)肯定会有所帮助,这已经在我测试中,正确预处理的问题仍然存在。 我的预处理包括调整大小,转换为灰度,二值化,反转和膨胀。这是代码: Mat resized = new Mat(); Imgproc.resize(image, resized, new Size(), 8, 8, Imgproc.INTER_CUBIC); Mat grayscale = new Mat(); Imgproc.cvtColor(resized, grayscale, Imgproc.COLOR_BGR2GRAY); Mat binImg = new Mat(grayscale.size(), CvType.CV_8U); Imgproc.threshold(grayscale, binImg, 0, 255, Imgproc.THRESH_OTSU); Mat inverted = new Mat(); Core.bitwise_not(binImg, inverted); Mat dilated = …


3
使用OpenCV从桌面游戏纸牌图像中提取插图
我在python中编写了一个小脚本,试图提取或裁剪仅代表艺术品的扑克牌部分,然后删除所有其余部分。我一直在尝试各种阈值方法,但无法达到目标。还要注意,我不能简单地手动记录图稿的位置,因为它并不总是处于相同的位置或大小,而是总是呈矩形,而其他所有内容都是文本和边框。 from matplotlib import pyplot as plt import cv2 img = cv2.imread(filename) gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) ret,binary = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU | cv2.THRESH_BINARY) binary = cv2.bitwise_not(binary) kernel = np.ones((15, 15), np.uint8) closing = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel) plt.imshow(closing),plt.show() 当前输出是我能得到的最接近的东西。我可能是正确的方法,并尝试进一步进行围绕白色部分绘制矩形的尝试,但是我认为这不是可持续的方法: 最后一点,请参阅下面的卡片,并非所有框架的尺寸或位置都完全相同,但是总会有一件艺术品,其周围只有文字和边框。它不一定要精确切割,但是很明显,艺术是卡片的“区域”,周围是包含文本的其他区域。我的目标是尽我所能捕获艺术品的区域。

1
OCR的清洁图像
我一直在尝试清除OCR的图像:(线条) 我需要删除这些行以有时对图像进行进一步处理,并且我已经很接近了,但是在很多情况下,阈值从文本中去除了太多: copy = img.copy() blur = cv2.GaussianBlur(copy, (9,9), 0) thresh = cv2.adaptiveThreshold(blur,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV,11,30) kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (9,9)) dilate = cv2.dilate(thresh, kernel, iterations=2) cnts = cv2.findContours(dilate, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) cnts = cnts[0] if len(cnts) == 2 else cnts[1] for c in cnts: area = cv2.contourArea(c) if area > 300: x,y,w,h = …

2
将2D点转换为3D位置
我有一台固定相机,已知cameraMatrix和distCoeffs。我也有一个固定的棋盘,transform并且rotation矢量也使用来计算solvePnP。 我想知道如何在棋盘所在的同一平面上获得2D点的3D位置,如下图所示: 可以肯定的是,该点的Z为0,但如何获得该点的X和Y。
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.