Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.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 OpenCV-如何通过斜线将图像分割为两个区域?_Python_Opencv_Numpy_Image Processing - Fatal编程技术网

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
获得非矩形,如下所示

基本步骤是:

  • 定义一个空图像
  • 定义角点
  • 空图像中的绘制轮廓(带填充)
  • 做面具手术
  • 我的Python3-OpenCV3.3代码:

    ## 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]
    合并,对吗?是的,你可以尝试一下,我想知道我们是否只有两点,我们不知道绘制等高线时要包括哪两个角点,那么在这种情况下如何获得遮罩呢?非常感谢。