質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Linux Mint

Linux Mintは、使いやすいLinuxシステムの提供を目的としたLinuxディストリビューションです。UbuntuとDebianをベースにしており、Ubuntuのリポジトリを共有しています。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

642閲覧

python3 OpenCV 特定の画像を検出

Untitled_Sample

総合スコア192

Linux Mint

Linux Mintは、使いやすいLinuxシステムの提供を目的としたLinuxディストリビューションです。UbuntuとDebianをベースにしており、Ubuntuのリポジトリを共有しています。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/06/02 17:35

編集2019/06/03 06:04

スクリーンショットなどから、
linux mint18のOnboardを画像検出で正確に使用したい。

#Onboard

スクリーンショットなどから、画像検出を行い。ボタンを区別したいのですが、
素材となる画像を検出する所で躓きました。

各枠ごとにいい感じになる様になる用 検出したいのですが上手く行きません。
色々試してるのですが、何か良い方法は無いでしょうか?

ダメなコード

python

1 2import cv2 3import numpy as np 4 5img = cv2.imread('on.png') 6 7edges = cv2.Canny(img,1920,1080) 8 9""" 10# グレースケール変換 11gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) 12 13# 線形濃度変換 14gamma = 2.0 15 16# 画素値の最大値 17imax = gray.max() 18 19# ガンマ補正 20gray = imax * (gray / imax)**(1/gamma) 21 22# 結果の出力 23cv2.imwrite("output.jpg", gray) 24 25 26""" 27cv2.imshow('edges',edges) 28cv2.waitKey(0) 29cv2.destroyAllWindows() 30 31

#追記
テンプレートマッチグと言うモノを試してみたのですが、検出されませんでした。
ディスプレイの明るさやOnboardの透明度など触ってますが、この状態で検出できればと思います。

イメージ説明

python

1 2import cv2 3import numpy as np 4from matplotlib import pyplot as plt 5 6img_rgb = cv2.imread('sh.png') 7img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY) 8template = cv2.imread('on.png',0) 9w, h = template.shape[::-1] 10 11res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED) 12threshold = 0.8 13loc = np.where( res >= threshold) 14for pt in zip(*loc[::-1]): 15 cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2) 16 17cv2.imwrite('res.png',img_rgb)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tiitoi

2019/06/03 03:41

画像処理で検出する必要はあるのでしょうか。 ソフトキーボードなら位置は固定だと思うので、予めどのキーはどの位置にあるという情報を与えておいて、切り出せばいいのではないでしょうか。
guest

回答2

0

自己解決

使うサイズのスクショを取って一致する部分を探しました。
イメージ説明

イメージ説明

python

1#coding:utf-8 2import cv2 3 4#画像をグレースケールで読み込む 5img = cv2.imread("img.png", 0) 6temp = cv2.imread("temp.png", 0) 7 8#マッチングテンプレートを実行 9#比較方法はcv2.TM_CCOEFF_NORMEDを選択 10result = cv2.matchTemplate(img, temp, cv2.TM_CCOEFF_NORMED) 11 12#検出結果から検出領域の位置を取得 13min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result) 14top_left = max_loc 15w, h = temp.shape[::-1] 16bottom_right = (top_left[0] + w, top_left[1] + h) 17 18#検出領域を四角で囲んで保存 19result = cv2.imread("img.png") 20cv2.rectangle(result,top_left, bottom_right, (255, 0, 0), 2) 21cv2.imwrite("result11.png", result) 22 23 24 25

#追記
皆さんが使う事は無いと思いますが左上からの0,0 相対座標を載せて起きます。

720x310 Onboardのsize
,,画面内 相対位置 座標

python

1 2 3""" 4import pandas as pd 5# csv headerなし 縦列の1,2,3行目 かつ 横列の3行目から取得 6df = pd.read_csv('memo.csv',header=None, usecols=[0,1,2],skiprows=2) 7l=df.values.tolist() 8 9# 確認 10from pprint import pprint 11pprint(l) 12 13 14r=[] 15 16# 座標をintに変換 コメントをstrに変換 17for i in l: 18 r.append([int(i[0]),int(i[1]),str(i[2])]) 19 20#確認 21pprint(r) 22 23 24""" 25 26 27 28l=[[25, 50, 'Esc'], 29 [80, 50, 'F1'], 30 [115, 50, 'F2'], 31 [150, 50, 'F3'], 32 [190, 50, 'F4'], 33 [245, 50, 'F5'], 34 [285, 50, 'F6'], 35 [325, 50, 'F7'], 36 [360, 50, 'F8'], 37 [415, 50, 'F9'], 38 [450, 50, 'F10'], 39 [490, 50, 'F11'], 40 [525, 50, 'F12'], 41 [580, 50, 'PrintScreen'], 42 [615, 50, 'Scroll'], 43 [655, 50, 'Pause'], 44 [700, 50, 'closs'], 45 [25, 100, 'ze'], 46 [60, 100, '1'], 47 [100, 100, '2'], 48 [135, 100, '3'], 49 [170, 100, '4'], 50 [210, 100, '5'], 51 [245, 100, '6'], 52 [285, 100, '7'], 53 [320, 100, '8'], 54 [355, 100, '9'], 55 [390, 100, '0'], 56 [430, 100, '-'], 57 [465, 100, '^'], 58 [520, 100, 'BackSpace'], 59 [580, 100, 'Ins'], 60 [615, 100, 'Home'], 61 [650, 100, 'PgUp'], 62 [700, 100, '-----'], 63 [35, 145, '-----'], 64 [80, 145, 'q'], 65 [120, 145, 'w'], 66 [155, 145, 'e'], 67 [190, 145, 'r'], 68 [230, 145, 't'], 69 [265, 145, 'y'], 70 [305, 145, 'u'], 71 [340, 145, 'i'], 72 [373, 145, 'o'], 73 [415, 145, 'p'], 74 [450, 145, '@'], 75 [485, 145, '['], 76 [530, 160, 'Ente'], 77 [580, 145, 'Del'], 78 [615, 145, 'End'], 79 [655, 145, 'PgDn'], 80 [700, 170, 'Abc'], 81 [40, 190, '__'], 82 [90, 190, 'a'], 83 [125, 190, 's'], 84 [165, 190, 'd'], 85 [205, 190, 'f'], 86 [235, 190, 'g'], 87 [275, 190, 'h'], 88 [310, 190, 'j'], 89 [350, 190, 'k'], 90 [385, 190, 'l'], 91 [420, 190, ';'], 92 [460, 190, ':'], 93 [495, 190, ']'], 94 [25, 235, 'Shift'], 95 [75, 235, '<'], 96 [115, 235, 'z'], 97 [150, 235, 'x'], 98 [185, 235, 'c'], 99 [220, 235, 'v'], 100 [255, 235, 'b'], 101 [295, 235, 'n'], 102 [330, 235, 'm'], 103 [370, 235, ','], 104 [410, 235, '.'], 105 [445, 235, '/'], 106 [500, 240, 'Shift'], 107 [620, 235, '↑'], 108 [580, 285, '←'], 109 [615, 285, '↓'], 110 [655, 285, '→'], 111 [700, 270, '123'], 112 [25, 285, 'Ctrl'], 113 [85, 285, 'Super'], 114 [135, 285, 'Alt'], 115 [255, 285, 'sp'], 116 [405, 285, 'Alt Cr'], 117 [440, 285, 'Super'], 118 [485, 285, 'Menu'], 119 [530, 285, 'Ctrl']] 120 121

投稿2019/06/07 06:45

編集2019/06/07 17:30
Untitled_Sample

総合スコア192

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ソフトキーボードのキーじゃないところは真っ黒なのでそこを真っ白に変える処理を入れたあとに2値化させるといい感じにキーが四角く取れそうですね。

投稿2019/06/03 04:07

Ryupe

総合スコア426

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問