Python OpenCV-如何通过斜线将图像分割为两个区域?
我正在使用Python OpenCV-如何通过斜线将图像分割为两个区域?,python,opencv,numpy,image-processing,Python,Opencv,Numpy,Image Processing,我正在使用HoughLinesP检测图像中的线条。结果是一条斜线。我想在这条线下的区域做一些手术(侵蚀和扩张) 所以我想问一下,如何通过这条线将图像分割成两个区域(region0和region1),或者在不分割图像的情况下处理region1 例如,图像大小为200*100,线条为(0、50、200、75) 如果直线是水平或垂直的,我可以使用image[y:y+h,x:x+w]在获得裁剪区域的矩形(x,y,w,h)时裁剪图像。但我不知道斜线是什么 您可以使用切片op获得一个矩形,掩码op获得非矩形
HoughLinesP
检测图像中的线条。结果是一条斜线。我想在这条线下的区域做一些手术(侵蚀和扩张)
所以我想问一下,如何通过这条线将图像分割成两个区域(region0和region1),或者在不分割图像的情况下处理region1
例如,图像大小为200*100
,线条为(0、50、200、75)
如果直线是水平或垂直的,我可以使用image[y:y+h,x:x+w]
在获得裁剪区域的矩形(x,y,w,h)时裁剪图像。但我不知道斜线是什么
您可以使用
切片op
获得一个矩形
,掩码op
获得非矩形,如下所示
基本步骤是:
## Step 1-3: drawContours in empty image
mask = np.zeros((100,200), np.uint8)
pts = np.array([[0,0],[0,50],[199,75],[199,0]])
_=cv2.drawContours(mask, np.int32([pts]),0, 255, -1)
## Step 4: do mask-op
img1 = img.copy()
img2 = img.copy()
img1[mask==0] = 0
img2[mask>0] = 0
## Write
cv2.imwrite("mask.png", mask)
cv2.imwrite("img1.png", img1)
cv2.imwrite("img2.png", img2)
以下是图像和结果:
src和掩码:
结果:
预期输出是什么?根据定义,图像必须是矩形的。事实上,我只是在区域1而不是区域0中执行一些操作。所以我想分割图像。如果有一些方法只处理区域1而不分割图像,那没关系。我们可以定义两个遮罩来定义这两个区域。这样,无论您对每个区域执行什么操作,都不会处理调零区域。然而,我感觉这是一个XY问题。你能描述一下你打算在这些区域做什么操作吗?腐蚀和扩张。好的,那么定义两个掩码可以吗?使用
result[mask==0]=img2[mask==0]
和result[mask>0]=img1[mask>0]
合并,对吗?是的,你可以尝试一下,我想知道我们是否只有两点,我们不知道绘制等高线时要包括哪两个角点,那么在这种情况下如何获得遮罩呢?非常感谢。