0

My target is to make a mask from .roi files. What I currently have is a .roi file (read with read_roi_file with a list of coordinates for each corner:

x = roi2['85']['x'] = [94, 95, 96, 97, 98, 99, 100, 101, 101, 102, 103, 104, 105, 106, 106, 107, 108, 108, 109, 110, 111, 111, 112, 112, 112, 111, 110, 109, 108, 108, 107, 106, 105, 105, 104, 104, 104, 103, 102, 101, 100, 99, 99, 99, 99, 98, 98, 98, 99, 99, 100, 100, 101, 101, 102, 103, 103, 104, 105, 105, 106, 107, 107, 108, 109, 109, 109, 109, 109, 109, 108, 107, 107, 106, 105, 105, 105, 106, 107, 108, 109, 110, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 119, 120, 120, 119, 118, 117, 116, 115, 114, 113, 112, 112, 112, 111, 111, 110, 110, 109, 109, 109, 109, 110, 110, 110, 111, 111, 111, 112, 112, 113, 113, 114, 114, 115, 115, 116, 116, 116, 117, 117, 118, 118, 117, 117, 116, 115, 114, 113, 112, 112, 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 99, 98, 97, 96, 95]
y = roi2['85']['y'] = [51, 51, 51, 51, 51, 51, 51, 51, 50, 50, 50, 50, 50, 50, 51, 51, 51, 52, 52, 52, 52, 53, 53, 54, 55, 55, 55, 55, 55, 54, 53, 53, 53, 54, 54, 55, 56, 56, 56, 56, 56, 56, 57, 58, 59, 59, 60, 61, 61, 62, 62, 63, 63, 64, 64, 64, 65, 65, 65, 66, 66, 66, 67, 67, 67, 68, 69, 70, 71, 72, 72, 72, 73, 73, 73, 74, 75, 75, 75, 75, 75, 75, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 73, 73, 72, 72, 72, 72, 72, 72, 71, 71, 71, 70, 69, 69, 68, 67, 66, 66, 65, 64, 63, 63, 62, 61, 61, 60, 59, 59, 58, 58, 57, 57, 56, 56, 55, 55, 54, 53, 53, 52, 52, 51, 51, 50, 50, 50, 50, 50, 50, 49, 49, 49, 49, 49, 49, 48, 48, 48, 48, 48, 48, 48, 48, 49, 49, 49, 49, 49]

For example point 1 has coordinates x1 = (x[0], y[0]) - that doesn't look pretty, but works. I've already made a matrix in the shape of original image filled with 0 and ROI points set to 1:

import numpy as np
zer = np.zeros((162, 162), dtype=int)
for i in range (len(roi2['85']['x'])):
    x = roi2['85']['x'][i]
    y = roi2['85']['y'][i]
    zer[x][y] = 1

My problem is, whether I should swap each 0 inside ROI to 1 (each element inside ROI has "1" on the top, bottom, left and right) or there is any library to help me with that. My solution however has a weak spot, when there will be ROI looking for example like a ring - then all zeros inside ring will be swapped to ones even if they aren't inside my ROI. I've read that OpenCV might be helpful but I'm not familiar with this topic, that's why I'm looking for help.

Kuba K
  • 23
  • 4
  • 1
    is that describing a contour, or is that an exhaustive list of all pixels? OpenCV can draw polylines/contours, even fill them. – Christoph Rackwitz Dec 31 '20 at 16:38
  • as @ChristophRackwitz said [filling contours with opencv python](https://stackoverflow.com/questions/19222343/filling-contours-with-opencv-python) and I found it with Google `"python opencv draw filled polygon"` – furas Dec 31 '20 at 17:17
  • thank you very much, problem solved with cv2.fillConvexPoly. Have a great new year! – Kuba K Dec 31 '20 at 17:20

0 Answers0