通过FindContours方法找到的等高线的层次结构进行导航?
对于C ++开发人员,直接使用OPENCV来说,这必须很简单.但是我正在使用的是Emgu(.NET的OpenCV包装器),在最新版本中,我们具有方法CvInvoke.FindContours返回void,输出结果通过参数引用传递,并且是类型VectorOfVectorOfPoint. 这是一个简单的调用: //outputResult is a VectorOfVectorOfPoint CvInvoke.FindContours(inputImage, outputResult, null, RetrType.Tree, ChainApproxMethod.ChainApproxSimple); 对于RetrType.List模式,我们可以将结果转换为一些数组,然后轻松地循环遍历所有轮廓.但是,在这里,我想浏览树上的所有轮廓.我想我们必须在此处使用Pointer(通过输出结果的Ptr属性访问)使用本机(不安全)C ++代码做点事
12 2024-04-15
编程技术问答社区
OpenCV(C): 计算等值线的时刻
这是我拥有的代码: #include "highgui.h" #include "cv.h" #include // this code finds contours int main (int argc, char* argv[]) { cvNamedWindow( argv[0], 1 ); IplImage* img_8uc1 = cvLoadImage( argv[1], CV_LOAD_IMAGE_GRAYSCALE ); IplImage* img_edge = cvCreateImage( cvGetSize(img_8uc1), 8, 1); IplImage* img_8uc3 = cvCreateImage( cvGetSize(img_8uc1), 8, 3); cvThreshold( img_8uc1, img_edge, 128, 255, CV_THRESH_BINARY ); CvMemSto
22 2024-04-09
编程技术问答社区
OpenCV-寻找轮廓端点?
我正在寻找一种方法来获取从Canny Edge检测中提取的细轮廓的终点.我想知道这是有可能的.我计划在轮廓上行走,以找到彼此之间最大距离的两个点(仅沿轮廓移动),但是如果已经存在一种方法,则会容易得多.我看到存在CVarclength是为了获得轮廓的周长,因此可能会有一种实现这一目标的内在方法.是否以某种方式可以知道有关终点的一些信息的轮廓中的点?还有其他想法吗?非常感谢! 解决方案 我正在寻找相同的功能,我看到 houghlinesp 有终点,因为使用了线条,而不是轮廓.但是,我正在使用FindContours,所以我发现下面类似的轮廓中订购要点是有帮助的,而不是将第一个和最后一个点作为起点和终点. . struct contoursCmpY { bool operator()(const Point &a,const Point &b) const { if (a.y == b.y) return a.x
10 2024-04-07
编程技术问答社区
用matplotlib创建随机形状/轮廓
我正在尝试使用Python生成随机轮廓的图像,但我找不到一种简单的方法. 这是我想要的示例: 最初,我使用matplotlib和高斯功能来进行此操作,但我什至无法接近显示的图像. 有一种简单的方法吗? 我感谢任何帮助 解决方案 matplotlib路径 实现随机且平滑形状的一种简单方法是使用使用立方体的bézier曲线,大多数线条将平滑,锋利边缘的数量将是调整的参数之一. 步骤将是以下内容.首先,定义了形状的参数,这些参数是尖锐的边缘n的数量,并且相对于单位圆r中的默认位置的最大扰动.在此示例中,这些点通过径向校正从单位圆移动,这将半径从1-r,1+r之间的1个随机数变化为. . 这就是为什么将顶点定义为相应角度的鼻窦或cosinus,半径因子将点放在圆中,然后修改其半径以引入随机分量. stack,.T转置和[:,None]仅将阵列转换为matplotlib接受的输入. 下面有一个使用这种径向校正的示例: import num
8 2024-03-30
编程技术问答社区
如何实时找到OpenCV轮廓的平均强度
我有一个大约50至100个小轮廓的图像.我希望实时找到这些轮廓的平均强度[1] [2].我能想到的一些方式是 在每个轮廓上都带有填充选项绘制轮廓;将每个图像用作原始图像上的掩码,从而找到平均值.但是我认为乍一看这种方法不会实时. 研究drawContour功能的OPENCV实现,并具有填充选项,并以相同的方式访问轮廓包含的像素.但是该代码似乎确实很复杂,并且不容易理解. 计算最小面积矩形,使用转换找到矩形内的所有点,然后找到非零的点的平均值.同样,似乎是复杂的方法. 是否有一种更轻松,有效的方法? [1]每个非重叠轮廓包含的所有像素强度的平均值 [2]大约25,(960 x 480)在2.66 GHz桌面PC上每秒的像素图像 解决方案 我无法提出与您建议的方法大不相同的任何方法.但是,我能够做一些可能有助于指导您决定的时间.我的所有时间安排都在iMac上的1280*720图像上运行,仅限于找到100个轮廓.当然,时间在您的机器上会有所不同,但是
22 2024-03-21
编程技术问答社区
如何找到最佳的四边形以近似OpenCV轮廓?
我有一个openCV轮廓c,其形状接近四边形,但它可以具有4至多个点. 我想找到最接近轮廓c的四边形q(一种方法可以是最小化它们之间的差异面积). 我当前使用 q = cv2.approxPolyDP(c, 0.02 * cv2.arcLength(c, True), closed=True) ,结果是并不总是四边形.我已经尝试了 是否有另一种方法(可能具有approxPolyDP以外的其他方法?)可以找到最佳的四边形近似? 注意:另一个链接的问题是 解决方案 我最近也有类似的问题,但是我没有用一般四边形近似轮廓,而是试图用矩形将其近似.我希望我的解决方案也对您的问题有所帮助. 我使用了Rotated Rectangle是由(center_x, center_y), (width, height), angle_in_degrees构建的.我建议您检查 import cv2 def check_rectangle_approx(contour)
18 2024-03-19
编程技术问答社区
在Python中绘制Pcolor数据图
我正在尝试使用PCOLOR在Python中绘制矩阵.这是我的代码,但行不通.你能告诉我如何绘制矩阵吗?! Matrix = np.zeros((NumX, NumY)) for i in range(NumX): for j in range(NumY): Matrix[i][j] = Data[i*NumY+j+1] # Set up a regular grid of interpolation points xi = np.arange(0, NumX*1.5, 1.5) yi = np.arange(0, NumY*1.5, 1.5) X, Y = np.meshgrid(xi, yi) intensity = np.array(Matrix) plt.pcolormesh(X, Y, Matrix) plt.colorbar() plt.show() 这是错误: typeerror:C(22,30)的尺寸与x(22)不相容 和/或
6 2024-03-07
编程技术问答社区
绘制显示颗粒百分比的等高线
我要生产的内容与此图相似: 是一个轮廓图,代表68%,95%,99.7%的粒子,其中包括两个数据集. 到目前为止,我试图实施高斯KDE估计,并在轮廓上绘制那些颗粒. 文件在此处添加from scipy.stats import gaussian_kde import matplotlib.pyplot as plt import numpy as np # My data x = RelDist y = RadVel # Peform the kernel density estimate k = gaussian_kde(np.vstack([RelDist, RadVel])) xi, yi = np.mgrid[x.min():x.max():x.size**0.5*1j,y.min():y.max():y.size**0.5*1j] zi = k(np.vstack([xi.flatten(), yi.flatten()])) fig = plt.figure(
16 2024-03-06
编程技术问答社区
用opencv计算由matplotlib创建的轮廓线的面积
我需要通过轮廓线来计算限制区域.我使用matplotlib获取轮廓线的顶点,但是我无法将其转换为OpenCV中的Contourarea方法的有效输入: Z = z_func(X, Y, Ql, k[i,j], B) cs = plt.contour(X, Y, Z,[IncT]) v = cs.collections[0].get_paths()[0].vertices xy = [] for vv in v: xy.append(vv[0]) cnt = np.array(xy) area = cv2.contourArea(cnt) 我得到此错误: ...... \ opencv-2.4.9.1 \模块\ imgproc \ src \ src \ contours.cpp:1904:错误:(--215)contour.checkvector(2)> = 0 &&(contour.depth()== cv_32f || Contour.Depth()== CV_32
20 2024-03-03
编程技术问答社区
在安卓系统中使用OpenCV提取通过颜色检测的区域
可以使用Android的OpenCV SDK随附的名为" Color-Blob检测"的示例项目可用于识别特定颜色的区域.我需要的是提取该区域并将其保存到手机内存中. 这是我到目前为止所了解的: 有一个轮廓列表: List contours = new ArrayList(); 使用: 发现轮廓 Imgproc.findContours(mDilatedMask, contours, mHierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE); 这找到了最大轮廓区域: double maxArea = 0; Iterator each = contours.iterator(); while (each.hasNext()) { MatOfPoint wrapp
28 2024-03-03
编程技术问答社区
如何在Python中使用Matplotlib计算等高线内的面积?
我正在尝试找出一种将特定轮廓线内区域的方法? 我使用matplotlib.pyplot来创建轮廓. 有人有经验吗? 非常感谢. 解决方案 从轮廓集合的collections属性中,该属性由contour函数返回,您可以获取描述每个轮廓的路径.然后,路径'vertices属性包含轮廓的有序顶点. 使用顶点,您可以近似轮廓积分0.5*(x*dy-y*dx),通过应用格林定理为您提供了封闭区域的区域. 但是,轮廓必须完全包含在图中,因为否则轮廓分解为多个,不一定连接的路径,并且该方法分解. 这是用于计算半径函数所包含的区域的方法,即r =(x^2 + y^2)^0.5,对于r = 1.0,r = 2.0,r = 3.0. import numpy as np import matplotlib.pylab as plt # Use Green's theorem to compute the area # enclosed by the given
54 2024-03-03
编程技术问答社区
使用FuncAnimation在matplotlib中为等高线图制作动画
我正在尝试在Matplotlib中创建一个动画,该动画更新了三位艺术家,包括Imshow,Contour和Text.使用FunCanimation,我可以更新文本和图像组件,但无法更新轮廓.具体来说,我尝试了一下我的回调: def updatefig(*args): text_component.set_text(newText()) image_component.set_array(newArrayData()) contour_component.set_array(newArrayData()) return [text_component,image_component,contour_component] 此代码不会引起异常,但也不会更新轮廓线.我想知道这是否只是我不知道是否有更多的设置法的方法.谁能告诉我这是否可能? 谢谢 eli 解决方案 我不完全理解您的代码(也因为它还不完整),我想评论您的问题而不是回答它...(
10 2024-02-26
编程技术问答社区
OpenCV寻找轮廓线的角点
我是OpenCV的新手.为了实践,我决定做一个" sudoku求解器".到目前为止,我能够做到这一点: public Mat processImage(final Mat originalImage, final CvCameraViewFrame frame) { image = originalImage.clone(); image = frame.gray(); /* We load the image in grayscale mode. We don't want to bother with the colour information, so just skip it. Next, we create a blank image of the same size. This image will hold the actual outer box of puzzle. */ Mat ou
42 2024-02-11
编程技术问答社区
安卓位图轮廓图
我正在尝试绘制可绘制的轮廓, 我尝试使用Blur,如此页: 如何在bitmap周围发光效果? 它的效果不是我想要的, 我想要一个"固体"轮廓, 不模糊. 有人知道如何吗? 解决方案 没有我能找到的轮廓类型过滤器或掩码,而模糊和阴影掩码不是很强.因此,您可以使用颜色过滤器和比例来创建自己的效果.此示例将创建一个红色轮廓 ColorFilter filter; filter = new PorterDuffColorFilter(0xFFFF0000, PorterDuff.Mode.SRC_IN); paint = new Paint(Paint.ANTI_ALIAS_FLAG); paint.setColorFilter(filter); canvas.save(); canvas.scale(1.1f, 1.1f,imageCenterX , imageCenterY); canvas.drawBitmap(image, imag
16 2024-02-09
编程技术问答社区
试图用opencv检测图像中的蓝色,得到了意外的结果
我是OpenCV4Android的新手.这是我写的一些代码,以检测图像中的蓝色斑点.在以下图像中,图像1在我的笔记本电脑中.我运行了应用程序和OpenCV摄像机捕获的框架是图像2.您可以查看代码以查看其余图像是什么. (如您在代码中看到的,所有图像都保存在SD卡中.) 我有以下问题:. 为什么在相机捕获的RGBA框架中变成浅蓝色斑点的颜色(如图2所示). 我在最大的蓝色斑点周围创建了一个boundingRect,然后通过执行rgbaFrame.submat(detectedBlobRoi).但是您可以在最后一个图像中看到,它看起来像几个灰色像素. 我期望蓝色球与图像的其余部分分开. 我想念什么或做错了什么? 代码: private void detectColoredBlob () { Highgui.imwrite("/mnt/sdcard/DCIM/rgbaFrame.jpg", rgbaFrame);//check
14 2024-01-29
编程技术问答社区
在三维网格上有效地找到等价点,以最小的成本计算点。
i具有 3D网格,每个点(x,y,z) 在网格上与A 有关成本价值.任何点(x,y,z)的成本 都不知道.要知道成本,我们需要进行一个非常昂贵的复杂查询.我们知道的一件事是,成本在所有三个维度上是单调的非折扣. . 现在给出了成本C,我需要在表面上找到成本C 的表面(x,y,z).这必须通过仅成本最低​​来完成.如何解决我的问题? 当我在线搜索时,我将获得与轮廓识别相关的技术,但是所有这些技术都认为所有点的成本都如前所述,例如行进立方体方法等.在我的情况下,主要指标是,费用的点数应最小. ,如果有人可以提出一种至少在不准确的情况下获得近似位置的方法,那将是有帮助的. 解决方案 重写解释: (原始文本,以防万一它可以向某人澄清这个想法,在线下方保持不变) 我们有一些函数 f(x,y,z)在三个维度上,我们希望找到表面 f(x,y,z) = c .由于该函数产生一个数字,因此定义 isosurface c . 在我们的情况下,评估函数 f(x,y,z)非常昂贵
8 2024-01-23
编程技术问答社区
opencv在寻找轮廓时使用的算法是什么?
我需要在程序中使用cv::FindContours(),我必须知道其背后的算法. opencv 用于查找轮廓的算法是什么? 它如何工作? 解决方案 如果您阅读 Suzuki,S.和Abe,K.,数字化的拓扑结构分析 边框二进制图像跟随. CVGIP 30 1,pp 32-46(1985) OPENCV是开源的,如果您想查看如何实现此目的,只需读取代码: 该论文可用其他解决方案 截至2018年9月,该论文可通过 Google Scholar .但是,这是摘要,以防论文被删除: 为拓扑提出了两个算法之后的边界 分析数字化的二进制图像.第一个决定了 二进制图像边界之间的包围关系.自从 外部边界和孔边框具有与 L像素的连接组件和孔的连接组件分别 提出的算法得出二进制图像的表示 哪一个可以提取某种功能,而无需重构 图像.第二个算法是第一个的修改版本, 仅遵循最外面的边界(即,外部边界 不被孔包围).这些算法可以有效地用于 组件计数,收缩和拓扑结构分析 二进制图像
18 2024-01-22
编程技术问答社区
如何使用Conrec为等高线组建连续点阵列?
我有一场康德·噩梦.我正在尝试使用ConRec在ActionScript中实现轮廓线.我看过Java和JavaScript实现,并且仍然被困.这些可以在这里找到: http://paulbourke.net/papers/papers/conrec/ ConRec将获取网格数据并组装连续轮廓线.问题在于,它不一定会连续地绘制这些线条.例如,它将绘制A-> B,然后绘制C-> B,然后绘制C-> D,而不是A,B,C,D等. JavaScript实现似乎正在考虑这一点,并将指令序列化为一系列抽奖点.这也是我最终想完成的.也就是说,它从Core ConRec逻辑(例如:A-> B,C-> B,C-> D等)中获取指令,并将其组织到A,B,C,D系列中. i Think 它还将以多维数组的形式返回该系列,以容纳断裂的线路(例如:[[a,b,c,d],[e,f,g]]).最后一个功能是我在ActionScript中需要做的. 最后一部分是我被卡住的地方.暂时忽略ConRec(我已经
20 2024-01-09
编程技术问答社区
affine_trans_contour_xld的Halcon-3D等价物
我有一个XLD轮廓,我需要从世界平面转换为图像平面..但是我只能找到affine_trans_contour_xld,它接受2D垫子,而不是3D垫子.从世界平面到图像平面? 基本上我需要的是contour_to_world_plane_xld 的倒数 编辑:我认为解决方案是找到XY平面的2D垫子,但找不到该方法. 解决方案 我这样解决了: *get the points of a 100 mm square on my XY plane. Since the XLD is in 1px=1mm affine_trans_point_3d(Mat3D, 0, 0, 0, X, Y, Z) project_3d_point(X, Y, Z, CamParam, Xp1, Yp1) affine_trans_point_3d(Mat3D, 0, 0.1, 0, X, Y, Z) project_3d_point(X, Y, Z, CamParam, Xp2, Yp2)
14 2024-01-08
编程技术问答社区