我很好奇 - 可以在PHP中进行刺激: 1)将图像文件发送到服务器 2)进程图像=检测边缘并在边缘创建简单的笔触 3)将文件保存在服务器上/将其发送到用户的浏览器/其他 这是一些"示例"文件; http://i51.tinypic.com/5vzo0x.jpg 谢谢! 解决方案 如果可以使用 ImageMagick ,有 木炭效应旨在模拟艺术家的木炭素描. " - charcoal"操作员在某些方面类似于计算机视觉使用的边缘检测变换.基本上,它试图将图像中物体的主要边界和边缘转换为铅笔和木炭阴影. 一个参数应该代表边缘线的厚度. ImageMagick示例手册显示了另一种方法,其结果看起来更好: 图像的艺术家木炭素描
以下是关于 edge-detection 的编程技术问答
我试图将图像中的边缘链接在下图中的图像中: 我尝试使用扩张/侵蚀操作,但结果不好.还有其他方法可以链接边缘吗? 这是原始图像: 解决方案 您的结果很可能足够好,可以将hough变换应用于整个图像中的八个最重要的线条. 我不知道您的所有图像是否相似,但是在示例中,您表明将灰色线与绿色背景分开很容易.例如,以下代码(使用img = readim('https://i.stack.imgur.com/vmBiF.jpg'); img = colorspace(img,'hsv'); img = (0.5-img{2})*img{3}; % img{2} is the saturation channel, img{3} is the value (intensity) channel img = clip(img); % set negative values to 0 接下来,高斯滤波器(是线路检测器)的拉普拉斯,某些阈值刚好高于零,并且仅选择较大的对象会导致
我正在尝试从彩色背景图像中提取文本.我正在尝试的一种方法是边缘检测.使用它,我将原始图像转换为可以使用的图像.这将消除图像中仅留下边缘的所有颜色. 我使用此代码获取边缘图像 import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('messi5.jpg',0) edges = cv2.Canny(img,100,200) 我的问题是在获得这些图像之后如何跟踪这些图像中的字母?任何帮助都会很棒.谢谢你们 这些是原始和边缘检测到的图像 原始图像 边缘检测到的图像 解决方案 使用此图像上的边缘检测为时过早,因为字符的边缘会被背景的边缘污染. 这是您可以通过选择接近白色的像素来获得的: 有趣的是,许多发布有关类似问题的人认为边缘检测是灵丹妙药.我认为,这通常是浪费,地区细分更为合适. 其他解决方案 您正处于一个很长的过程开
我有一个 image noreferrer">图像带有轻微透视的台球桌子: 我正在尝试取消图像(使台球桌的角落对应于我的输出图像的角落),然后在输出图像上检测池球.为了张开表格,我打算使用cv2.PerspectiveTransform()获取将池桌的角落映射到输出图像的角落的转换矩阵.但是,我没有桌子角落的位置.我想编程找到角落. 到目前为止,我已经应用了泳池表的边缘仅: 我的想法是使用Hough Line Transform算法来查找与台球表边缘相对应的线(以编程方式找到台球表的拐角),但是Hough Line Transform Transform Transform算法似乎很难检测到边缘很好.我如何从这里找到台球桌的角? 编辑 有什么办法可以提取轮廓的尖角(对应于直边变成口袋的八个点)? 解决方案 只能通过推断直侧来获得角落. 您可以首先将轮廓包裹在最小区域矩形中以获得粗糙的近似值.从此近似值中,您可以提取相当直(使用预定义的掩码)的轮
我正在为智能手机游戏编写第三方工具应用程序.在此游戏中,有一个页面显示网格中的图标: 我想制作一个可以检测并拆分这些图标的功能. 我尝试了很多事情,例如在图像中检测网格. 通过遵循这些教程,我得到的最好的结果就是这样: 这不是一个很好的结果,我不知道我可以做什么处理它. 我认为很难的原因是: 背景颜色是如此强烈. 图标中的内容比它们之间的分离器更丰富. 实际上,没有分离器线,但只有框架在图标周围. 那么,是否有任何可以模糊地检测正方形的算法?或任何其他方法/建议解决此问题? 解决方案 我建议考虑一下您图标的边界颜色几乎是白色的,并且图标包含在网格中. 因此,适当的阈值将带您进入这样的东西: import cv2 BGR = cv2.imread('input.jpg') Cpy = BGR.copy() # Thresholding Cpy[Cpy[...,0]!=Cpy[...,1]]=0 Cpy[Cpy[...,2]
我知道,在使用Canny检测边缘之前,将高斯模糊应用于图像很重要.我的问题是:cv2.Canny()是否单独使用高斯模糊,还是有必要在cv2.Canny()之前应用cv2.GaussianBlur()?该文档在这一点上尚不清楚. 解决方案 回想一下,在Python中使用OpenCV实际上是OpenCV的C ++接口的包装器. Chany Edge检测算法在C ++中的实现文件可以在此处找到: https://github.com/opencv/opencv/blob/master/modules/imgproc/src/canny.cpp 如果您检查了此源,则可以看到图像上没有任何模糊.但是,由于Yves Daoust的校正(见下文),Sobel边缘检测算法用于查找梯度.有一个aperture输入参数指定SOBEL内核的大小.使用默认值意味着您使用的是3 x 3内核,并且没有应用模糊.但是,以上3 x 3以上的任何东西都将使用高斯内核.因此,如果您想使用默认的SOBEL内核
我目前正在从二进制图像中提取线.我最初执行了一些图像处理步骤,包括阈值分割并获得以下二进制图像. 在二进制图像中可以看到,线被拆开或损坏.我想加入损坏的线路,如下图所示,标有红色.我手动标记了红线进行演示. fyi,我使用以下代码执行预处理. img = cv2.imread('original_image.jpg') # loading image gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # coverting to gray scale median_filter = cv2.medianBlur (gray_image, ksize = 5) # median filtering th, thresh = cv2.threshold (median_filter, median_filter.mean(), 255, cv2.THRESH_BINARY) # theshold segmentat
我正在尝试通过Visual C ++使用OpenCV来提取图像的轮廓.我能够使用opencv >用于FindContours. FindContours在两个步骤中工作 使用Canny Edge检测器检测边缘. 将Canny的输出喂入FindContours. 我想与'Mat src = imread("image.jpg"); src.convertTo(src, CV_32F, 1.0 / 255.0); Mat edges(src.size(), src.type()); Ptr pDollar = createStructuredEdgeDetection("model.yml.gz"); pDollar->detectEdges(src, edges); findContours(edges, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Po
序言:这是的延续 考虑以下代码,取自: import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('messi5.jpg',0) edges = cv2.Canny(img,100,200) # Would 100 and 200 matter if your original image was black and white? plt.subplot(121),plt.imshow(img,cmap = 'gray') plt.title('Original Image'), plt.xticks([]), plt.yticks([]) plt.subplot(122),plt.imshow(edges,cmap = 'gray') plt.title('Edge Image'), plt.xticks([]), plt.yticks([]) plt.show(
这个问题是我以前的问题询问如何检测台球桌的角落.我找到了 不幸的是,霍夫变换返回单个表格的多行.我希望霍夫变换返回四行,每行对应于表的边缘给定的任何图像.我不想手动调整Hough变换方法的参数(因为泳池表的每个图像的轮廓可能会有所不同).有什么方法可以保证cv2.HoughLines()? 生成的四行 预先感谢. 编辑 使用 @fana的评论,我使用以下代码创建了梯度方向的直方图.我仍然不确定如何从此直方图中获得四行. img = cv2.imread("Assets/Setup.jpg") hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) masked_img = cv2.inRange(hsv_img, (50, 40, 40), (70, 255, 255)) gaussian_blur_img = cv2.GaussianBlur(masked_img, (5, 5), 0) sobel_x = np.asa
我有此图像: 我试图将背景放在焦点上,以便在图像上执行边缘检测.我可以使用什么方法(要么 提交的空间/频率)? 我尝试的是以下内容: kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]]) im = cv2.filter2D(equ, -1, kernel) 这将输出此图像: 我也以中心值进行了演奏,但没有积极的结果. 我也尝试过: psf = np.ones((5, 5)) / 25 equ = convolve2d(equ, psf, 'same') deconvolved = restoration.wiener(equ, psf, 1, clip=False) plt.imshow(deconvolved, cmap='gray') 没有明显更改图像. 对此事的任何帮助将不胜感激! 编辑: Here is the code that I took from 在这里:
我正在使用Python中的OpenCV检测混凝土中的裂纹.我能够使用Canny Edge检测来检测裂缝.接下来,我需要填充边缘.我使用了OPENCV的洪水操作,但其中一些差距填补了,而有些则未填充. im_th1 = imginput im_floodfill = im_th1.copy() # Mask used to flood filling. # Notice the size needs to be 2 pixels than the image. h, w = im_th1.shape[:2] mask = np.zeros((h + 2, w + 2), np.uint8) # Floodfill from point (0, 0) cv2.floodFill(im_floodfill, mask, (5, 5), 255); # Invert floodfilled image im_floodfill_inv = cv2.bitwise_not(im_floodf
我试图在一系列图像中找到倾斜角度,这些图像看起来像下面创建的示例数据.应该有一个清晰的边缘,可以看到眼睛可见.但是,到目前为止,我正在努力提取边缘. Canny是在这里找到边缘的正确方法还是找到更好的边缘方式? import cv2 as cv import numpy as np import matplotlib.pyplot as plt from scipy.ndimage.filters import gaussian_filter # create data xvals = np.arange(0,2000) yvals = 10000 * np.exp((xvals - 1600)/200) + 100 yvals[1600:] = 100 blurred = gaussian_filter(yvals, sigma=20) # create image img = np.tile(blurred,(2000,1)) img = np.swapaxes(img,0
我需要检测我使用houghcircle函数的眼睛图片的虹膜.所以, // Read the image src = imread("D:/001R_3.png"); if( !src.data ) { return -1; } /// Convert it to gray cvtColor( src, src_gray, CV_BGR2GRAY ); /// Reduce the noise so we avoid false circle detection GaussianBlur( src_gray, src_gray, Size(9, 9), 2, 2 ); ///////////// /// Generate grad_x and grad_y Mat grad_x, grad_y; Mat abs_grad_x,
我正在研究这个项目,必须在不实际查看图像的情况下自动化相机拍摄的图像的清晰度计算.我尝试了许多检测方法,但最终我使用OpenCV的Laplacian操作员走得更远. 现在,OpenCV中的Laplacian操作员返回图像矩阵.但是,无论图像是否模糊,我都必须获得布尔输出,这取决于我的阈值. 任何链接,算法或IEEE纸张的任何链接都会有所帮助.谢谢! 解决方案 您会发现很多Infos 在这里. 也很有趣的答案中引用的论文: 分析 其他解决方案 请参阅此 Laplacian(gray, laplacianImage, CV_64F); Scalar mean, stddev; // 0:1st channel, 1:2nd channel and 2:3rd channel meanStdDev(laplacianImage, mean, stddev, Mat()); double variance = stddev.val[0] * stddev.val
我在轮廓这种类型的低对比对象上遇到困难: 我的目标是: 在上面的示例中,我将cv2.findContours与下面的代码一起使用,但使用105 ret,thresh = cv.threshold(blur, 105, 255, 0)的阈值.但是,如果我为低对比度图像复制它,我找不到最佳阈值值: import numpy as np from PIL import Image import requests from io import BytesIO import cv2 as cv url = 'https://i.stack.imgur.com/OeZJ9.jpg' response = requests.get(url) img = Image.open(BytesIO(response.content)).convert('RGB') img = np.array(img) imgray = cv.cvtColor(img, cv.COLOR_BGR2G
我想在深度图上找到大约对象. 目前,我的过程如下: 1.深度的归一化 2.仅获取最接近对象的阈值 3.高斯模糊 4. Canny Edge检测 5.轮廓检测 但是,我找不到物体周围的盒子.实际上,我不知道使用这种深度图是否可能... 我在桌子上有三个对象:一盒食物和两个杯子. 我想在我的物体周围找到大约一个盒子. 是否有一种方法仅通过图像处理来做到这一点? 任何帮助将不胜感激. 非常感谢您. 解决方案 您可以使用OpenCV进行此操作.看看以下解决方案. 我将问题中提供的深度图用作我的输入图像.我执行了深度图的灰度图像的二进制阈值 ret,th = cv2.threshold(gray,127,255, 1) 并获得以下内容: 现在,为了填补图像中的空白,我进行了形态关闭操作 kernel = np.ones((15,15),np.uint8) dilate = cv2.morphologyEx(th, cv2.MORPH
我刚刚从OpenCV开始,我正在尝试制作一个程序,以使某些沙子上的岩石图片围绕着正方形.功能的文档findContours( src, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE ); FindContours的原型是 void findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset=Point()) ; 我有两个问题. 1.示例hierarchy中的第三个参数是vector与FindContours期望的类型不匹配.这是为什么? 2.如何使用存储在contours中的数据来查找轮廓创建边界框的位置? 解决方案 std::vector >
我正在尝试设计一个类似于CamScanner的应用程序.为此,我必须拍摄图像,然后在其中找到该文档.我从这里描述的代码开始 - .blogspot.in/2012/06/sudoku-solver-part-2.html 我发现了轮廓,并具有最大区域的矩形轮廓应为所需的文档.对于每个轮廓,我都会发现一个近似的封闭polydp.在所有尺寸4的polydp中,具有最大区域的一个应该是所需的文档.但是,此方法不起作用. 该过程的输入图像是 我试图用最大区域打印轮廓,这导致了这一点(字母内字母'c') 代码: img = cv2.imread('bounce.jpeg') gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) gray = cv2.GaussianBlur(gray,(5,5),0) thresh = cv2.adaptiveThreshold(gray,255,1,1,11,2) _, contours, hie