ウェブカメラを使用してマウスカーソルをナビゲートするために緑色のキャップチップを持つペンで作業しようとしていますが、pyinputライブラリ移動関数への入力としてそれを与えることができるように画面上のキャップ画像の座標を取得するにはどうすればよいですか?
前もって感謝します。
# Python program for Detection of a
# specific color(green here) using OpenCV with Python
import cv2
import numpy as np
import time
cap = cv2.VideoCapture(0)
while (1):
# Captures the live stream frame-by-frame
_, frame = cap.read()
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
lower_red = np.array([75, 50, 50])
upper_red = np.array([100, 255, 255])
mask = cv2.inRange(hsv, lower_red, upper_red)
res = cv2.bitwise_and(frame, frame, mask=mask)
cv2.imshow('frame', frame)
cv2.imshow('mask', mask)
cv2.imshow('res', res)
**#code to output coordinates of green pen tip**
k = cv2.waitKey(5) & 0xff
if k == 27:
break
cv2.destroyAllWindows()
cap.release()
必要なものはすべて揃っています。あと数ステップ必要です。
まず、マスク内のゼロ以外の点を見つけます。これは先端を表すはずです。
points = cv2.findNonZero(mask)
次に、それらを平均して、先端を表す「一意のポイント」を設定できます。
avg = np.mean(points, axis=0)
これで、これを0-1の値に正規化して、後で任意の解像度で使用できるようにすることができます...または、画面の解像度に直接正規化することもできます...
# assuming the resolutions of the image and screen are the following
resImage = [640, 480]
resScreen = [1920, 1080]
# points are in x,y coordinates
pointInScreen = ((resScreen[0] / resImage[0]) * avg[0], (resScreen[1] / resImage[1]) * avg[1] )
考慮すべき点がいくつかあります。まず、opencv座標系の原点が左上を下向きで右向きになっていることを思い出してください。
---->
|
| image
|
v
これらの点座標をどこでどのように使用するかによっては、軸を反転する必要がある場合があります。
第二に、OpenCVではポイントはx、yであり、(少なくとも私が手動で書いた解像度は)幅と高さです...必要に応じてこれに対処するためにコードを適応させる必要があるかもしれません:)
ご不明な点がございましたら、コメントを残してください
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加