Скриншот области с openCV через Python 3.7.3 - PullRequest
0 голосов
/ 09 апреля 2019

Конечная цель проекта состоит в том, чтобы сделать снимок экрана и вывести круги в местах расположения снимков экрана (средняя точка и радиус). Таким образом, самым началом этого проекта является захват экрана и отправка его через функцию поиска круга. Я начал здесь: Снимок экрана с OpenCV и Python-2.7

Это работает для его функциональности, и на моем компьютере cv2.imshow успешно отображает снимки экрана, как и должно. Однако я хочу, чтобы он работал с этим примером: https://opencv -python-tutroals.readthedocs.io / en / latest / py_tutorials / py_imgproc / py_houghcircles / py_houghcircles.html

По сути, код в этом примере работает для cv2.imshow, однако я хочу, чтобы он работал с cv2.imread, поэтому он совместим с примером, который я хочу скопировать.

Я пробовал несколько основных вещей безрезультатно, для справки см. Ниже!

Попытка 1: http://prntscr.com/n8tpyh

printscreen_pil = Imagegrab()
printscreen_numpy = np.array(printscreen_pil.getdata(),dtype='uint8')
img = cv2.imread(printscreen_humpy , 0)

Ошибки при cv2.imread с сообщением TypeError: bad arguement type for built-in operation

Попытка 2: http://prntscr.com/n8tqtp

from mss import mss
mon = {'top':160 , 'left': 160 , 'width': 200, 'height': 200 }
sct = mss()
sct.get_pixels(mon)

Ошибки при sc.getpixels с сообщением AttributeError: 'MSS' object has no attribute `get_pixels'

Попытка 3: https://prnt.sc/n8tw7w

img_grab = ImageGrab.grab(bbox=(0,0,500,500))
img = np.array(img_grab)
#img = cv2.imread(img)
img = cv2.medianBlur(img,5)
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)

Ошибки в cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR) с очень длинным сообщением, которое я суммирую в (-2:Unspecified error) и Invalid number of channels in input image: 'VScn::contains(scn)' where 'scn' is 3 для получения дополнительной информации, пожалуйста, откройте скриншот, если не выбросите комментарий, и я наберу этот кусок для вас!

Попытка 4: http://prntscr.com/n8u0jc

cords = {'top':40 , 'left': 0 , 'width': 800, 'height': 640 }
with mss() as sct :
img = np.array(sct.grab(cords))
img = cv2.medianBlur(img,5)
cimg = cv2.cvtColor(img , cv2.COLOR_GRAY2BGR)

Ошибки на cimg = cv2.cvtColor(img , cv2.COLOR_GRAY2BGR) с сообщением я снова подведу итог к Invalid number of channels in input image: `VScn::contains(scn)' where 'scn' is 4

Спасибо всем !!!!

1 Ответ

0 голосов
/ 13 апреля 2019

На основании вашей попытки 4 используйте это, чтобы определить cimg:

cimg = cv2.cvtColor(img, cv2.COLOR_BGRA2GRAY)
...