Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在图像中仅显示45度线_Python_Opencv_Convolution_Edge Detection - Fatal编程技术网

Python 在图像中仅显示45度线

Python 在图像中仅显示45度线,python,opencv,convolution,edge-detection,Python,Opencv,Convolution,Edge Detection,我想检测仅与原点成45度角的图像中的线条。我只能用3x3卷积。我已经解决了这个问题,所有45度的直线都被删除了,其他的都保留了下来(与我想要的相反)。从这里到我的最终目标的任何帮助都将非常感谢,谢谢 import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('Lines.png') plt.imshow(img, cmap='gray') plt.show() kernel = np.ar

我想检测仅与原点成45度角的图像中的线条。我只能用3x3卷积。我已经解决了这个问题,所有45度的直线都被删除了,其他的都保留了下来(与我想要的相反)。从这里到我的最终目标的任何帮助都将非常感谢,谢谢

import cv2
import numpy as np
import matplotlib.pyplot as plt


img = cv2.imread('Lines.png')

plt.imshow(img, cmap='gray')
plt.show()

kernel = np.array([[0, -1, 0],
                   [1, 0, 1],
                   [0, -1, 0]])

dst = cv2.filter2D(img, -1, kernel)
cv2.imwrite("filtered.png", dst)
这是卷积之前的图像:

这是卷积后的图像:

我使用的过滤器是:

kernel = np.array([[0, -25, 1],
                   [-25, 5, -25],
                   [1, -25, 0]])
结果是:


它并不完美,但希望能有所帮助。

根据您在问题中提供的代码,我们获得了除我们想要获得的行之外的行。因此,我们可以将其放大,以填充行

img = cv2.imread('lines.png')
kernel = np.array([[0, -1, 0],
                   [1, 0, 1],
                   [0, -1, 0]])

dst = cv2.filter2D(img, -1, kernel)
kernel = np.ones((5, 5), np.uint8)
dilated = cv2.dilate(dst, kernel, iterations = 1)

然后,我们需要在45度角处移除线条上方的点,因此我们使用
形态学开口
进行此操作,并对图像设置阈值,以将所有线条转换为像素值=255

kernel = np.ones((7, 7), np.uint8)
opening = cv2.morphologyEx(dilated, cv2.MORPH_OPEN, kernel)
_,thresh = cv2.threshold(opening,10,255,cv2.THRESH_BINARY)

然后使用原始图像的
cv2.bitwise_和
,以及获得的阈值的
cv2.bitwise_非
,我们得到了我们的线条

res = cv2.bitwise_and(img, cv2.bitwise_not(thresh))

我们得到了线,但是我们需要去除中间的圆。为此,我们在原始图像上使用
cv2.腐蚀
仅获得中间圆,对其进行阈值设置,然后再次使用
cv2.按位_和
cv2.按位_不
将其从分辨率中移除

kernel = np.ones((7, 7), np.uint8)
other = cv2.erode(img, kernel, iterations = 1)
_,thresh = cv2.threshold(other,10,255,cv2.THRESH_BINARY)
result = cv2.bitwise_and(res, cv2.bitwise_not(thresh))
cv2.imshow("Image", result)
cv2.waitKey(0)
cv2.destroyAllWindows()

您可以添加预期结果吗?根据描述,您是否只需要边缘或其他东西还不是100%清楚。我已经编辑了问题,我想检测与白色居中原点成45度角的线。这仍然不清楚。请添加预期结果。你想要的结果是什么?是否只希望矩形的边为+45º?是否要同时为+45º和-45º的完整(填充)矩形?很抱歉,仍然不清楚,我希望删除所有线条,但45度的线条除外。被我的卷积移除的直线应该保留,现在存在的直线应该被移除。我怎样才能得到另一条45度的直线?垂直于这条线的那条。交换0和1?不,垂直于这条明亮的线的那条线。在我给出的图中有2,45度线,不是吗?我告诉过你@Asim,问题不清楚。。。我问你是只想要+45还是同时想要+45和-45。看起来你两个都想要。我仍然不知道你想要的是边缘还是填充矩形…@Asim当Quang建议交换0和1时,这意味着在内核中,而不是在图像中,以防你不清楚。