0

多数の入力変数に基づいて一連の画像を生成する最も効率的な方法を見つけようとしています。出力は、「チャネル」によって中央の中央領域に接続された一連の「ゾーン」である必要があります。使用したいゾーンの数を入力して、ゾーンとチャネルが画像内に適切に配置された画像を自動的に作成できるようにしたいと考えています。

私は、opencv ライブラリを使用して Python でこれを実行しようとしました。入力変数だけから画像が生成されるように、このコードを自動化する方法について誰かアイデアを提供できますか? ループ内でゾーンとチャネルを作成しながら、本質的にゾーンの数をループしますか?

2 ゾーンと 3 ゾーンのレイアウトを示す画像

上記の 3 ゾーン バージョンを作成するために使用したコードは次のとおりです。

img = np.zeros((500,500),np.uint8)
img = cv2.bitwise_not(img)
img = cv.fromarray(img)
channel_width = 10
channel_length = 75
zones = 3
zone_width = 40
zone_thickness = 4
channel_thickness = 4
h = img.rows; w = img.cols;#,w,z = img.shape

# center
Xc = h/2
Xc0 = int(round(Xc - zone_width/2))
Yc = w/2
Yc0 = int(round(Yc - zone_width/2))
cv.Rectangle(img,(Xc0,Yc0), (Xc0+zone_width,Yc0+zone_width), 
             cv.RGB(0,0,0),zone_thickness,8)

#zones to left
x0 = int(round(Xc-1.5*zone_width-channel_length))
y0 =int(round(Yc-zone_width/2))
x1 =int(round(Xc -zone_width/2 - channel_length))
y1 = int(round(Yc + zone_width/2))
cv.Rectangle(img,(x0,y0),(x1,y1),cv.RGB(0,0,0),zone_thickness,8)

#left channel
cx0 = int(round(Xc0)) #int(round(Xc0-1.5*zone_width-channel_length))
cy0 = int(round(Yc0 + zone_width/2 - channel_width/2))
cx1 = int(round(Xc0 - channel_length))
cy1 = int(round(Yc0 + zone_width/2 + channel_width/2))
cv.Rectangle(img,(cx0,cy0),(cx1,cy1),cv.RGB(0,0,0),channel_thickness,8)
cv.Rectangle(img,(cx0+2*zone_thickness,cy0),(cx1-2*zone_thickness,cy1),
             cv.RGB(255,255,255),-1,8)

#zones to top
x0 = int(round(Xc-.5*zone_width))
y0 =int(round(Yc-1.5*zone_width - channel_length))
x1 =int(round(Xc + zone_width/2 ))
y1 = int(round(Yc - zone_width/2 - channel_length))
cv.Rectangle(img,(x0,y0),(x1,y1),cv.RGB(0,0,0),zone_thickness,8)    

#top channel
cx0 = int(round(Xc0 + zone_width/2 - channel_width/2)) 
      #int(round(Xc0-1.5*zone_width-channel_length))
cy0 = int(round(Yc0 ))
cx1 = int(round(Xc0 + zone_width/2 + channel_width/2))
cy1 = int(round(Yc0 -channel_length))
cv.Rectangle(img,(cx0,cy0),(cx1,cy1),cv.RGB(0,0,0),channel_thickness,8)
cv.Rectangle(img,(cx0,cy0+2*zone_thickness),(cx1,cy1-2*zone_thickness), 
             cv.RGB(255,255,255),-1,8)

#zones to right
x0 = int(round(Xc+1.5*zone_width+channel_length))
y0 =int(round(Yc-zone_width/2))
x1 =int(round(Xc +zone_width/2 + channel_length))
y1 = int(round(Yc + zone_width/2))
cv.Rectangle(img,(x0,y0),(x1,y1),cv.RGB(0,0,0),zone_thickness,8)    

#right channel
cx0 = int(round(Xc0+zone_width)) #int(round(Xc0-1.5*zone_width-channel_length))
cy0 = int(round(Yc0 + zone_width/2 - channel_width/2))
cx1 = int(round(Xc0 +zone_width + channel_length))
cy1 = int(round(Yc0 + zone_width/2 + channel_width/2))
cv.Rectangle(img,(cx0,cy0),(cx1,cy1),cv.RGB(0,0,0),channel_thickness,8)
cv.Rectangle(img,(cx0-2*zone_thickness,cy0),(cx1+2*zone_thickness,cy1),
             cv.RGB(255,255,255),-1,8)
4

0 に答える 0