水印周围的轮廓线 opencv
我想在图像中的水印周围画一个盒子.我提取了水印并找到了轮廓.但是,该轮廓并未在水印周围绘制.轮廓绘制在我的完整图像上.请帮助我使用正确的代码. 轮廓坐标的输出为: [array([[[ 0, 0]], [[ 0, 634]], [[450, 634]], [[450, 0]]], dtype=int32)] 输出图像是: 我的代码片段如下: img = cv2.imread('Watermark/w3.png') gr = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) bg = gr.copy() closing = cv2.morphologyEx(bg, cv2.MORPH_CLOSE, kernel) #dilation followed by erosion #plt.imshow(cv2.subtract(img,opening)) plt.imshow(
0 2023-11-27
编程技术问答社区
绘制从二进制图像中检索的轮廓线
我想在二进制图像中使用findContours,但是回调函数会导致错误: 指定为rtlfreeheap 的无效地址 返回时. 当我想使用clear()释放vector >值时,它会导致相同的异常,并且代码在free.c in the Line中崩溃: if (retval == 0) errno = _get_errno_from_oserr(GetLastError()); 例如: void onChangeContourMode(int, void *) { Mat m_frB = imread("3.jpg", 0); vector> contours vector hierarchy; findContours(m_frB, contours, hierarchy, g_contour_mode, CV_CHAIN_APPROX_SIMPLE);
2 2023-11-20
编程技术问答社区
闪烁的轮廓线
我的程序的目标是从摄像机中识别最大的轮廓并用红线绘制. 我发现,当检测到最大的轮廓(aka largest_contours)时,轮廓的轮廓线将闪烁,有时会中断围绕它绘制红线的功能(因为轮廓线不再连接,因此在图像中不再检测到轮廓). 我的问题是: 这个问题发生的原因是什么? 如何避免(或我们可以避免)此问题发生? 有什么建议改善我的轮廓检测程序? 预先感谢. PS: For the codes, pics and more info, click 在这里. 解决方案 findContours OpenCV的API修改了它用于查找轮廓的图像.您可以尝试以下内容. Mat displayContours = Mat::zeros(image.rows,image.cols,CV_8UC1); for(int i = 1;i
0 2023-11-18
编程技术问答社区
使用C++ FindContours在视频图像中寻找轮廓的问题
我现在正在使用的程序几乎完成了完成的程序,但我对结果并不满意.通过使用Canny算法,我设法清楚了该对象的轮廓,但是该程序有一些问题可以识别轮廓并用红线绘制轮廓.程序: void setwindowSettings(){ namedWindow("Contours", CV_WINDOW_AUTOSIZE); createTrackbar("LowerC", "Contours", &lowerC, 255, NULL); createTrackbar("UpperC", "Contours", &upperC, 255, NULL); } void wait(void) { long t=30000000; while(t--); } int main(void) { VideoCapture cap(0); // open the default camera if(!cap.isOpened()) // check if we
0 2023-11-18
编程技术问答社区
在OpenCV中使用ROI?
ROI只能通过矩形实现.但是,我有一个想设置为投资回报率的轮廓.有人知道我将如何使用轮廓作为ROI而不是矩形吗? 否则,如果不可能,我只能以特定轮廓中的像素将我的动作聚焦? 谢谢 PS:对所有这些OpenCV问题表示抱歉.真的很困惑:$ 解决方案 OPENCV仅支持矩形ROI. 但是,要对特定像素进行一些处理,您可以使用一些辅助功能. 其中之一是pointpolygontest(),它告诉您给定的像素不属于多边形. 因此您可以写 之类的东西 for(i=0;i
2 2023-11-18
编程技术问答社区
从三维矢量画出三维轮廓图
我想为3D数据绘制轮廓图. 我在x,y,z方向上有一支力量,我想绘制该轮廓3的 fx = 21x21x21的尺寸对于fy和fz 相同 我发现力= f*vector(x,y,z) 然后 Fx(x,y,z) = force(1) Fy(x,y,z) = force(2) Fz(x,y,z) = force(3) 我做了以下操作,但它不与我合作?为什么以及如何绘制 FS = sqrt(Fx.^2 + Fy.^2 + Fz.^2); x = -10:1:10; [X,Y] = meshgrid(x); for i=1:length(FS) for j = 1:length(FS) for k=1:length(FS) contour3(X,Y,FS(i,j,k),10) hold on end end end 这是我遇到的错误 使用Contour3(第129行)错误 当z是向量时,x和
6 2023-11-17
编程技术问答社区
控制散点标记的透明度
我需要控制MATLAB中使用scatterhist命令产生的图形中标记的透明度. 以下帖子有助于处理直方图的颜色: 如何修改标记的透明度? 如何在标记顶部添加轮廓图? 解决方案 tl; dr : 在MATLAB R2019A中, scatterhist() 可以做轮廓" https://stackoverflow.com/questions/50466320/controlling-scatterhist-bar-colors/50466995#comment103562645_50466995"> possible 请参见下面的第三个选项,使用 % MATLAB R2019a n = 250; % Number of Points X = exprnd(3,n,1); Y = gamrnd(9,1/3,n,1); 使用 您可以使用MarkerAlpha属性调整标记透明度. T = table(X,Y); figure s
12 2023-10-25
编程技术问答社区
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)
6 2023-10-25
编程技术问答社区
如何在opencv python中记录不同的轮廓线
我正在尝试通过录制视频中的python中的opencv跟踪对象.我想在每个可见对象出现时给出一个唯一的对象NR.例如,一个对象进入屏幕并获取NR1,然后第二个对象连接第一个并获得NR2,然后第一个对象离开屏幕,但第二个对象仍然可见,并且仍然获得对象NR2而不是1(是唯一的对象).我找不到有关如何在线执行此操作的任何信息.感谢任何帮助(包括代码). 我到目前为止写的代码用于获取轮廓和绘制对象编号: cap = cv2.VideoCapture("video.mov") while True: flag, frame = cap.read() cv2.drawContours(frame, contours, -1, (255,0,0) ,1) for i in range(len(contours)): cnt = contours[i] cnt_nr = i+1 x,y,w,h = cv2.boundin
4 2023-10-25
编程技术问答社区
将等高线路径转换为svg路径
我正在与python一起使用OpenCV从图像中提取轮廓.现在,我需要将这些轮廓路径(列表)导出为SVG路径.我该如何实现? 代码: ret,thresh = cv2.threshold(imgray,27,25,0) contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL , cv2.CHAIN_APPROX_TC89_L1) print(type(contours)) #type list 解决方案 问题已解决如下: c = max(contours, key=cv2.contourArea) #max contour f = open('path.svg', 'w+') f.write('') f.write('
14 2023-10-05
编程技术问答社区
创建等高线图
给定一组(x, y, z)坐标,我将如何创建轮廓图? 很高兴知道如何在 for https://github.com/jasondavies/conrec.js.js 本质上,我想使用d3.js复制此轮廓图: http://beaugunderson.com/routes/routes/ 解决方案 使用conrec.js看起来这很容易.如果您以所拥有的形式传递数据,则可以通过调用.contourList()在结果中获取路径列表.您应该能够通过不修改d3 .data()呼叫.您要做的就是提供一个路径生成器,该路径发生器将数据中的坐标映射到筛选坐标. . 其他解决方案 plotly.js基于d3.js,并提供了轮廓图.例如: plotly.js:如何避免重叠的轮廓线? 如何将plotly.js应用于现有SVG组作为目标,而不是将其应用于目标 元素? 还有一个用于D3.js的轮廓插件(我尚未使用): 和一个例子: http://bl.
2 2023-10-05
编程技术问答社区
Python:从matplotlib.pyplot.contour()中找到等高线。
我正在尝试找到(但不绘制!)用于某些数据的轮廓线: from pprint import pprint import matplotlib.pyplot z = [[0.350087, 0.0590954, 0.002165], [0.144522, 0.885409, 0.378515], [0.027956, 0.777996, 0.602663], [0.138367, 0.182499, 0.460879], [0.357434, 0.297271, 0.587715]] cn = matplotlib.pyplot.contour(z) 我知道cn包含我想要的轮廓线,但我似乎无法得到 给他们.我尝试了几件事: print dir(cn) pprint(cn.collections[0]) print dir(cn.collections[0]) pprint(cn.collections[0].figure) print
24 2023-09-08
编程技术问答社区
我想用轮廓检测法对从图像中提取的单词按其出现的顺序进行排序。
我正在制作一个OCR,我正在使用轮廓检测​​,我提取了单词并绘制了边界框,但问题是当我裁剪单个单词时,它们的顺序不是分类的.我尝试在此链接对轮廓进行排序,但它们在对象上最有效,但在我的情况下,我想确切地进行订单.有时,排序不是最好的解决方案,它会改变单词模式,因为不同的单词在相同的行中具有不同的边界框的大小,而" x"和" y"的值随之变化.现在,在同一行中,具有较大边界框的单词被认为是一个类别,而小的单词被视为其他类别,并且它们以相同的方式进行分类.这是要排序的代码. sorted_ctrs=sorted(ctrs, key=lambda ctr: cv2.boundingRect(ctr)[0] + cv2.boundingRect(ctr)[1] * im.shape[1] ) 提取的有界盒子的图像 还有其他方法可以安排我的话以使其有意义吗? 解决方案 您应该首先分开不同的线条.完成此操作后,您可以简单地处理从左到右的轮廓(从x = 0到x =
8 2023-09-07
编程技术问答社区
在Python中从左到右对轮廓线进行排序(OpenCV)
我正在使用Python和OpenCV来检测图像中的轮廓.但是,当我运行以下代码仅使用轮廓索引绘制特定轮廓时,由于分配的索引是随机的,我会得到错误的输出. 所以我发现了质心(就我而言,所有质心都位于同一条水平线上). 有什么方法可以根据质心的x值从左到右(从0到n开始)对轮廓索引进行排序? 您能显示同样的代码吗?任何帮助将不胜感激! contours, hierarchy = cv2.findContours(thresh,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE) i = 9 ## Contour Index
10 2023-09-07
编程技术问答社区
OpenCV C++: 根据轮廓面积对轮廓进行排序
如何按轮廓区域的大小对轮廓进行排序?我该如何获得最大/最小的? 解决方案 您可以使用 std::sort 使用自定义比较功能对象 // comparison function object bool compareContourAreas ( std::vector contour1, std::vector contour2 ) { double i = fabs( contourArea(cv::Mat(contour1)) ); double j = fabs( contourArea(cv::Mat(contour2)) ); return ( i > contours; std::vector hierarchy; cv::
108 2023-09-07
编程技术问答社区
OpenCV || 轮廓相似度
如您在图像中所看到的,我想比较这些轮廓. 当将这些轮廓相互比较时,我需要我的openCV程序才能返回true. 他们都看起来一样,但您可以看到它们并不完全相同. 您在这里看到的结果是我从函数FindContours返回的内容. 所以我正在寻找适合这些轮廓的合适方法. 任何帮助都会很棒. 非常感谢您. 解决方案 Take a look at cvMatchShapes() (以前称为cvMatchContours()). 其他解决方案 要使用matchShapes()函数,您应该将vector,vector作为参数传递. 因此,不是像您一样的轮廓容器,而是从中进行的特定轮廓.您要比较的形状应该是一个轮廓.
16 2023-09-03
编程技术问答社区
重叠形状识别(OpenCV)
我有一个简单的图像,其中包含一些形状:一些矩形和一些椭圆形,总数为4或5.形状可以旋转,缩放和重叠.有一个样本输入: 我的任务是检测所有这些数字并准备一些有关它们的信息:大小,位置,旋转等.我认为,核心问题是形状可以彼此重叠的事实.我试图搜索有关此类问题的一些信息,发现OpenCV库可能非常有用. OpenCV具有检测轮廓,然后尝试将椭圆形或矩形适合这些轮廓.问题是当形状被过多时,轮廓混合了. 我考虑遵循算法:检测所有特征点:并将白点放在它们上.我得到了类似的东西,每个数字都分为单独的部分: 然后,我可以尝试使用一些信息来链接这些零件,例如复杂性值(我将曲线colve actoldp符合到轮廓以及读取其有多少零件).但这开始非常困难.另一个想法是尝试将轮廓链接并试图适合它们的所有排列.最好的汇编将是输出. 有什么想法如何创建简单但优雅的解决方案? 解决方案 模糊图像有助于找到代码中所示的交叉点 #include "opencv2/imgproc.hpp"
10 2023-08-31
编程技术问答社区
OpenCV关闭一个形状并填充它
我想输出一只蓝色的手,但要获得不正确的输出.我包括输入图片,不正确的输出图片和下面的代码. 我认为下面的代码不会填充整个图像,因为图像尚未在正确的边界处关闭. 如何关闭形状并正确填充蓝色? #include #include #include #include #include #include using namespace cv; using namespace std; void drawStuff(); void showInputWindow(); void showCannyWindow(); void showContourWindow(); int thresh = 40; int max_thresh = 120; M
14 2023-08-31
编程技术问答社区