如何在OpenCV python中忽略内部黑色轮廓?
在上图中,我只需要以下轮廓:8、7、0、2、4. 它们内部的所有其他轮廓黑色的空盒子.有没有一种方法可以仅使用CV2.Retr_Tree自动提取此类轮廓? cv2.retr_external将忽略2和4,我实际上需要 >>heirarchy >>array([[[ 7, -1, 1, -1], [-1, -1, 2, 0], [-1, -1, 3, 1], [-1, -1, 4, 2], [-1, -1, 5, 3], [ 6, -1, -1, 4], [-1, 5, -1, 4], [ 8, 0, -1, -1], [-1, 7, -1, -1]]]) 如何从上面的继承结构中提取外部轮廓,而不能超越2和4,而忽略1、3、5、6,因为这四个轮廓仅包含内部的空区域?
20 2023-03-24
编程技术问答社区
如何绘制每个分割对象的轮廓线
我应用流域细分来检测接触对象,并且可以做到这一点.现在,我想绘制每个对象的轮廓,以便我可以获得它们的长度,区域,时刻等.但是分割结果中的对象仍在触摸.因此,我无法画出每个轮廓.如何绘制每个对象的轮廓? #include #include #include using namespace std; using namespace cv; int main() { Mat src = imread("source.png"); // Create binary image from source image Mat srcGray; cvtColor(src, srcGray, CV_BGR2GRAY); Mat srcThresh; threshold(srcGray, srcThresh
26 2023-02-28
编程技术问答社区
检测附着在图像上其他东西上的小方块
我想检测图像上用红色圈出的小方块.但问题是他们在另一条白线上.我想知道如何将这些正方形与白线分开并检测它们. 我使用 OpenCV Python 编写代码.到目前为止,我所做的是我裁剪了图像,以便我只能访问图像的圆形部分.然后我裁剪图像以获得所需的部分,即白线.然后我使用了腐蚀,这样白线就会消失,而方块会保留在图像中.然后使用霍夫圆来检测正方形.这确实适用于某些图像,但不能一概而论.请帮我找到一个通用的代码.让我知道逻辑和python代码. 还有谁能帮我检测图像上的 aruco 标记.它被拒绝了.我不知道为什么.图片在此链接中.检测图像上的小方块 解决方案 这里是带有 distanceTransform 的 C++ 代码.由于我几乎只使用过 openCV 函数,因此您可以轻松地将其转换为 Python 代码. 我手动删除了图像顶部的白色条纹,希望这不是问题. int main() { cv::Mat input = cv::imread("C:/St
218 2022-08-02
编程技术问答社区
用openCv在java中检查出的等高线
我想让我的程序输入一张图片(附件)输入并输出一个字符串,如: 问题 1:选中框 2 问题 2:选中框 1 问题 3:选中框 3 问题 4:勾选框 2 等等……(每张图片我有多少问题) 我可以用这个程序简单地定位空盒子: import java.util.ArrayList; import java.util.List; import org.opencv.core.Core; import org.opencv.core.CvType; import org.opencv.core.Mat; import org.opencv.core.MatOfPoint; import org.opencv.core.Point; import org.opencv.core.Rect; import org.opencv.core.Scalar; import org.opencv.core.Size; import org.opencv.imgcodecs.Imgcod
178 2022-08-02
编程技术问答社区
OpenCV findContours不按顺序排列
使用OpenCV的findContours方法时,怎么没有按顺序找到轮廓? inputImage = cv2.imread("randomImage.jpg",0) im2, contours, hierarchy = cv2.findContours(inputImage.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) j=1 for cnt in reversed(contours): letter = inputImage[y:y+h, x:x+w] cv2.imwrite(str(j)+"sub/"+str(k)+'.png', letter) k+=1 输入图像由几个字母组成,例如“abcde".但是,当轮廓保存到文件时,它们会以随机顺序保存,如“c"、“e"、“d"、“a"、“b".这有什么原因吗? 输出:t、l、h、b、e、r、g、o、e 解决方案 如果你仔细观察 Op
630 2022-08-02
编程技术问答社区
探测嘈杂背景中的小物体有困难。有什么方法可以解决这个问题吗?
我正在尝试制作一个计算机视觉程序,它可以在嘈杂的背景(例如海滩)中检测垃圾和随机垃圾(由于沙子而嘈杂). 原图: 无需任何图像处理的 Canny 边缘检测: 我意识到图像处理技术的某种组合将帮助我实现我的目标,即忽略嘈杂的沙地背景并检测地面上的所有垃圾和物体. 我尝试进行中值模糊、调整和调整参数,它给了我这个: 它在忽略沙地背景方面表现良好,但它无法检测到地面上的其他许多物体,可能是因为它被模糊了(不太确定). 有没有什么方法可以改进我的算法或图像处理技术,从而忽略嘈杂的沙地背景,同时允许精巧的边缘检测找到所有对象,并让程序检测并在所有对象上绘制轮廓. 代码: from pyimagesearch.transform import four_point_transform from matplotlib import pyplot as plt import numpy as np import cv2 import imutils im =
70 2022-08-02
编程技术问答社区
如何用OpenCV检测/寻找复选框的轮廓
我有几张图像需要通过使用计算机视觉检测复选框来进行 OMR. 我使用 findContours 仅在扫描文档中的复选框上绘制轮廓.但是算法会提取文本的每一个轮廓. from imutils.perspective import four_point_transform from imutils import contours import numpy as np import argparse, imutils, cv2, matplotlib import matplotlib.pyplot as plt import matplotlib.image as mpimg image = cv2.imread("1.jpg") gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) blurred = cv2.GaussianBlur(gray, (5, 5), 0) edged = cv2.Canny(blurred, 75, 200)
80 2022-08-02
编程技术问答社区
OpenCV, cv2.approxPolyDP() 在封闭的轮廓线上绘制双线
我想用这个蒙版创建一些多边形: 图片 1 - 面具 所以我用 openCV findcontours() 创建了这些轮廓: 图像 2 - 轮廓 创建多边形时,我得到了这些多边形: 图像 3 - 多边形 如您所见,一些多边形是使用双线绘制的.如何防止这种情况发生? 查看我的代码: import glob from PIL import Image import cv2 import numpy as np # Let's load image = cv2.imread(path + "BigOneEnhanced.tif") # Grayscale gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # Find Canny edges edged = cv2.Canny(gray, 30, 200) # Finding Contours contours, hierarchy =
1276 2022-07-27
编程技术问答社区
OpenCV的轮廓线没有关闭
大家好! 我遇到了关于创建轮廓的问题.我尝试了所有配置,不幸的是,我无法获得对象的一个​​大轮廓.第一个文件被加载到位图中,最后位图被加载到文件中.(此处未显示,因为它没有给出任何信息). 之前的图片: 之后的图片: 我想要的效果只是整辆车的外轮廓,或者至少是它的一些近似值.我目前拥有的代码(在到处查看之后)是这样的: bitmap = ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(filePath), 500, 500); Mat src = new Mat(); Utils.bitmapToMat(bitmap, src); Mat gray = new Mat(); Imgproc.cvtColor(src, gray, Imgproc.COLOR_RGBA2GRAY); Imgproc.Canny(gray, gray, 0, 1000);
240 2022-07-17
编程技术问答社区
在openCV2中绘制凸形船体 Python
所以我试图从 python 中的轮廓绘制凸包,但是当我打印图像时它没有改变. roi=mask[y:y+h,x:x+w] roi = cv2.fastNlMeansDenoisingColored(roi,None,15,15,7,21) hull = cv2.convexHull(cnt) cv2.drawContours(roi,[hull],0,(147,0,255),2) cv2.imshow(str(i),roi) blank_image[y:y+h,x:x+w] = roi 但是,如果我不包含代码,则显示的图像完全相同.我在网上查了,但似乎找不到答案.这是一个示例图片: 解决方案 我用下面的代码来获取你给的图像的凸包: import cv2 import numpy as np img = cv2.imread('2.png') img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) ret, thresh = cv2
3060 2022-07-17
编程技术问答社区