当前位置: 首页 > 知识库问答 >
问题:

有没有办法从图像中提取扭曲的矩形/正方形?

宗鸿博
2023-03-14

这是图像,我想填充这个矩形或正方形的边缘,这样我就可以使用轮廓裁剪它。到目前为止,我所做的是,我使用canny边缘检测器查找边缘,然后使用按位_或我将这个矩形填充一点,但不是完全填充。如何填充这个矩形,或者有没有直接裁剪的方法?

image = cv2.imread('C:/Users/hp/Desktop/segmentation/test3.jpeg')

img3 = img2 = image.copy()
image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
img3 = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)

lower = np.array([155,25,0])
upper = np.array([179,255,255])
mask = cv2.inRange(image, lower, upper)

edges = cv2.Canny(mask, 1, 255, apertureSize=7)
result = cv2.bitwise_or(edges, mask)



共有1个答案

司徒兴思
2023-03-14

下面是在Python/OpenCV中提取矩形白色像素边界的一种方法。

  • 读取输入
  • 转换为灰色
  • 阈值
  • 做Canny边缘检测
  • 获取霍夫线段,并在黑色背景上绘制为白色
  • 获取白色像素的边界
  • 裁剪输入到边界

输入:

import cv2
import numpy as np

# load image as grayscale
img = cv2.imread('rect_lines.jpg')

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# threshold 
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY)[1]

# apply canny edge detection
edges = cv2.Canny(thresh, 100, 200)

# get hough line segments
threshold = 100
minLineLength = 50
maxLineGap = 20
lines = cv2.HoughLinesP(thresh, 1, np.pi/360, threshold, minLineLength, maxLineGap)

# draw lines
linear = np.zeros_like(thresh)
for [line] in lines:
    #print(line)
    x1 = line[0]
    y1 = line[1]
    x2 = line[2]
    y2 = line[3]
    cv2.line(linear, (x1,y1), (x2,y2), (255), 1)

# get bounds of white pixels
white = np.where(linear==255)
xmin, ymin, xmax, ymax = np.min(white[1]), np.min(white[0]), np.max(white[1]), np.max(white[0])
#print(xmin,xmax,ymin,ymax)

# draw bounding box on input
bounds = img.copy()
cv2.rectangle(bounds, (xmin,ymin), (xmax,ymax), (0,0,255))

# crop the image at the bounds
crop = img[ymin:ymax, xmin:xmax]

# save resulting masked image
cv2.imwrite('rect_lines_edges.png', edges)
cv2.imwrite('rect_lines_hough.png', linear)
cv2.imwrite('rect_lines_bounds.png', bounds)
cv2.imwrite('rect_lines_crop.png', crop)

# display result, though it won't show transparency
cv2.imshow("thresh", thresh)
cv2.imshow("edges", edges)
cv2.imshow("lines", linear)
cv2.imshow("bounds", bounds)
cv2.imshow("crop", crop)
cv2.waitKey(0)
cv2.destroyAllWindows()


精明的边缘:

Hough线段:

输入时的边界框:

裁剪图像:

 类似资料:
  • 我有一个多边形的形状文件,我想用它来将光栅值提取到数据帧中。所以我在下面的代码中这样做。 这为我提供了一个由两列组成的数据框:每个多边形的数字ID和关联的提取光栅值。现在,我想为每个提取的光栅值添加x,y坐标。我已经看到对点形状文件执行此操作,但我不确定如何将其应用于多边形形状文件几何体。

  • 本文向大家介绍openCV提取图像中的矩形区域,包括了openCV提取图像中的矩形区域的使用技巧和注意事项,需要的朋友参考一下 改编自详解利用OpenCV提取图像中的矩形区域(PPT屏幕等) 原文是c++版,我改成了python版,供大家参考学习。 主要思想:边缘检测—》轮廓检测—》找出最大的面积的轮廓—》找出顶点—》投影变换 运行效果 用到的图片 以上就是本文的全部内容,希望对大家的学习有所帮助

  • 关于镜头扭曲 桶形失真是一种镜头缺陷,它会导致直线向外弯曲到图像的外缘。枕形失真的效果相反,直线会向内弯曲。 桶形失真(左图)和枕形失真(右图)的示例 晕影是一种由于镜头周围的光线衰减而使图像的拐角变暗的缺陷。色差显示为对象边缘的一圈色边,它是由于镜头对不同平面中不同颜色的光进行对焦而导致的。 一些镜头会在特定的焦距、光圈大小和对焦距离下呈现出不同的缺陷。有了镜头校正滤镜,您就可以指定用于制作图像

  • 我想像这样扭曲图像: 2013年4月8日新增:我使用了此代码,但无法正常工作:

  • 问题内容: 我找到了一些有关如何在iText中绘制表单的教程,但是我需要将其插入单元格中,但我不知道如何。谢谢您对此事的考虑。 问题答案: iText图像扩展了矩形。您可以对图像进行新的实现。 您可以从模板创建图像,也可以使用内容字节创建模板。 因此,您可以创建一个模板,在其上绘制一个矩形,创建图像,然后将图像设置在所需的单元格上。一段时间以前,我已经用矩形图案做了类似的事情。 编辑:如果只需要填

  • 我正试图从一张支票的图像中提取帐号。我的逻辑是,我试图找到包含帐号的矩形,对边框进行切片,然后将切片输入到OCR中,从中获取文本。 我面临的问题是,当矩形不是非常突出和浅色,我不能得到矩形的轮廓,因为边缘不是完全相连的。 如何克服这一点?我试过但不起作用的事情是 I不能增加侵蚀迭代,以侵蚀它更多,因为这样边缘与周围的黑色像素连接并形成不同的形状。 减小阈值偏移量可能会有所帮助,但似乎效率不高。因为