ウェブカメラからopencvを使用してフレームを取得し、プロットします。 私は私がいる奇妙な問題は、私は長方形のことですmatplotlibイメージのボックス領域を選択して拡大します
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import cv2
boxSize = 150
enlargeBy = 3
def getBoxCoordinates(cap, size):
width = cap.get(3)
height = cap.get(4)
x1 = int(width/2) - int(size/2)
y1 = int(height/2) - int(size/2)
x2 = int(width/2) + int(size/2)
y2 = int(height/2) + int(size/2)
return [(x1, y1), (x2, y2)]
def getBox(cap, boxSize, frame, enlargeBy):
[(x1, y1), (x2, y2)] = getBoxCoordinates(cap, boxSize);
# Get pixels in box
box_img = frame[y1 + 1:y2, x1 + 1:x2] # +1 cuz it excludes initial pixel interval
return cv2.resize(box_img, None, fx=enlargeBy, fy=enlargeBy,
interpolation=cv2.INTER_LINEAR) # different interpolation methods
cap = cv2.VideoCapture(0);
ret, frame = cap.read()
figWidth = 20
figHeight = 8
fig = plt.figure(figsize=(figWidth, figHeight))
enlarged = getBox(cap, boxSize, frame, enlargeBy)
[(x1, y1), (x2, y2)] = getBoxCoordinates(cap, boxSize);
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 0, 255), lineType=1)
video_plot = plt.subplot2grid((figHeight, figWidth), (0, 0), colspan=4, rowspan=4)
video_plot.axis('off')
video_plot.set_title("Camera feed")
video = video_plot.imshow(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
box_plot = plt.subplot2grid((figHeight, figWidth), (0, 4), colspan=4, rowspan=4)
box_plot.axis('off')
box_plot.set_title("Box")
box = box_plot.imshow(cv2.cvtColor(enlarged, cv2.COLOR_BGR2RGB)) #frame just to start
def updatefig(i):
ret, frame = cap.read()
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 0, 255), lineType=1)
enlarged = getBox(cap, boxSize, frame, enlargeBy)
video.set_data(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
box.set_data(cv2.cvtColor(enlarged, cv2.COLOR_BGR2RGB))
return [video, box]
ani = animation.FuncAnimation(fig, updatefig, interval=20, frames=200, blit=True)
plt.tight_layout()
plt.show()
cv2.destroyAllWindows()
plt.show()
(補間によって拡大)プロットの中央に四角形を描画し、別のプロットに選択したエリアやショーを得ますフレーム上の描画が正しく表示されていません。1つまたは複数の辺しか表示されません。 図の寸法が変更されたときにこれが変化することに気付きました。私が変更された場合、それは、私だけ下と左側を示し、上記のコードで:
figWidth = 10
その後、私は下、右、上からではなく、左を参照してください。
正確にこれを引き起こしている可能性があり、修正する方法はありません。
作品見事とTY – dtam