uwscで画像がうまく認識できない

このQ&Aのポイント
  • uwscのCHKIMG関数を使用して、画像認識を行っています。
  • 最初にAという画像を認識し、その少し左隣にあるBという画像を認識したいのですが、上手くいきません。
  • 座標の指定方法を変えても同様の問題が発生し、どうすればいいかわかりません。
回答を見る
  • ベストアンサー

uwscで画像がうまく認識できない

while 1 if CHKIMG("gazou/A.bmp",-1,,,,) > 0 then break wend で画面上にAという画像は認識した後、 その少し左隣にあるBという画像を認識したいのですが上手くいきません while 1 if CHKIMG("gazou/B.bmp",-1,G_IMG_X-24,G_IMG_Y-7,G_IMG_X-1,G_IMG_Y+24) > 0 then break wend という感じでやったらループから帰ってこなくなりました 座標を G_IMG_X-24,G_IMG_Y-7,G_IMG_X-1,G_IMG_Y+24 から普通の数字の組み合わせにしたらちゃんと認識できたので この書き方が間違っているというのはわかるんですが、 どうしてもAの画像の座標から左にずれたこの位置を指定したいのです。 ですが自分はこの書き方以外知らないのです・・・ Aの画像を認識した後に、 そのAの画像があった座標から(X-27,Y-7,X-1,Y+24)ほどずれた位置を指定して その範囲にB画像があるかどうか確かめるということをするには どうすればいいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#194317
noname#194317
回答No.2

ChkImg関数の中でG_IMG_XやYを使うのは、まずそうな予感がします。内部的に、ChkImg関数を実行した途端、特殊変数が消されてしまうような気がするからです。 なので、画像Aが見つかったところで別の変数にG_IMG_XとYの値を取っておき、それを使うようにすれば動くでしょう。 //---------- //画像Aを待つループ //---------- While True   If ChkImg("gazou/A.bmp",-1) Then Break Wend //---------- //画像Aを見つけた座標を保存する //---------- last_x=G_IMG_X last_y=G_IMG_Y //---------- //画像Bを待つループ //---------- While True   If ChkImg("gazou/B.bmp",-1,last_x-24,G_last_y-7,last_x-1,last_y+24) Then Break Wend

fporhgpw
質問者

お礼

そのやり方でやってみたら出来ました! ありがとうございました!

その他の回答 (1)

  • axel_eye
  • ベストアンサー率64% (145/226)
回答No.1

if CHKIMG("gazou/B.bmp",-1,(G_IMG_X-24),(G_IMG_Y-7),(G_IMG_X-1),(G_IMG_Y+24)) 計算式を入れずに、括弧を付けて前もって計算した結果を入れてはだめですか? 当方、これで上手くいきました。

fporhgpw
質問者

お礼

ううむ、試してみたのですが自分はうまくいきませんでした・・・ 前もって計算した結果、というのは前にまた別の式が必要だったのでしょうか? 回答ありがとうございました

関連するQ&A

  • UWSCについて

    画像がAになったらその画像をクリックしてBに変わったらまたクリックするというのを作りたいのですがどうにもA画像の時にクリックが連打になってしまします どこが悪いのでしょうか? While True Ifb ChkImg("A.bmp",0) BTN(LEFT,CLICK,G_IMG_X+5,G_IMG_Y+5,80) ChkImg("B.bmp",0) BTN(LEFT,CLICK,G_IMG_X+5,G_IMG_Y+5,80) ENDIF WEND

  • UWSCのプログラミングついて教えてください。

    UWSCについてです。 私は、UWSCをまだ1週間ほどしか触っていない超初心者です。 下記のようなプログラミングを組みたいと思っているので、プログラミング初挑戦なので右も左も良く分かっていません。 UWSCのプログラミングに詳しい方助けてください。 私の組みたいプログラミングは ("A.BMP",0)を無制限ループしつつ、("B.BMP",0)は2時間おきにループしつつ、("C.BMP",0)を30分間に30回実行する 場合のプログラミングです。【3つ同時進行です。】 宜しくお願いします。 while True ifb CHKIMG("A.BMP",0) x=G_IMG_X // 画像の座標をxへ代入 y=G_IMG_Y // 画像の座標をyへ代入 BTN(LEFT, CLICK, x, y, 80) endif ifb CHKIMG("B.BMP",0) x=G_IMG_X // 画像の座標をxへ代入 y=G_IMG_Y // 画像の座標をyへ代入 BTN(LEFT, CLICK, x, y, 80) endif ifb CHKIMG("C.BMP",0) x=G_IMG_X // 画像の座標をxへ代入 y=G_IMG_Y // 画像の座標をyへ代入 BTN(LEFT, CLICK, x, y, 80) endif wend

  • UWSCの画像認識について

    質問させていただきます ifb CHKIMG("画像.bmp",) BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y) endif これを複数の画像でやりたいときは ifb CHKIMG("画像.bmp",) BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y) endif ifb CHKIMG("画像.bmp",) BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y) endif のようにしないとだめなのでしょうか? それとも ifb CHKIMG("画像.bmp",) CHKIMG("画像.bmp",) CHKIMG("画像.bmp",) CHKIMG("画像.bmp",) BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y) endif こんな感じにまとめる事はできるのでしょうか? 例として教えてもらえると助かります。 よろしくお願いします

  • UWSCのスクリプトについて

    画像Dを認識したら画面上に画像Bがあっても 処理Bを実行しない為にはどうしたら良いでしょうか。 -------- while True BTN(LEFT,click,150,10,110)   //処理A Sleep(2) ifb CHKIMG("A.bmp")    x=G_IMG_X            y=G_IMG_Y BTN(left,click,x,y,110) Sleep(1.5) endif Ifb ChkImg("B.bmp")       //処理B BTN(LEFT,click,1120,90,110) Sleep(1) KBD(VK_return,DOWN,30) endif ifb CHKIMG("C.bmp")      //処理C x=G_IMG_X            y=G_IMG_Y BTN(left,click,x,y,110) Sleep(1.5) wend --------

  • uwscについて

    画像認識で質問があります。 画像Aがあった場合画像Aをクリックするのは出来るのですが 画像Aがあった場合画像Bをクリックする場合どのようにすればいいのでしょうか? IFB (CHKIMG("A.bmp")=TRUE) THEN SLEEP(0.3) //B、C出現までの間を調整 IFB (CHKIMG("B.bmp")=TRUE) THEN BTN(LEFT, CLICK, G_IMG_X, G_IMG_y) ELSEIF (CHKIMG("C.bmp")=TRUE) THEN BTN(LEFT, CLICK, G_IMG_X, G_IMG_y) ENDIF しらべてこのとおりやってみたら 最初のIFBに対してENDIFがないと言われてうまくいきません ちょっと調べたのですが分からなかったので助けてください

  • UWSCの画像認識について

    プログラム初心者ですがUWSCでプログラムを作っています 画像認識において認識するべき画像が複数種類あるときのパターンができなくて困っています ifb CHKIMG("青空") x=G_IMG_X // 画像の座標をxへ代入 y=G_IMG_Y // 画像の座標をyへ代入 BTN(LEFT,CLICK,x,y,100) SLEEP(0.5) else Endif のように、単独の画像を認識し、その画像をクリックさせることはできるのですが 「青空」もしくは「夕空」もしくは「夜空」が出た時にその画像をクリックする のような命令をかくことができません ifb CHKIMG("青空" or "夕空" or"夜空") のような形でかければいいのですが、もちろんこれでは動きませんでした どうすればこれを実行できるようになるのか教えてくださいm(__)m

  • UWSCのスクリプトについて

    日々のルーチンワークで退屈な作業をPC様にやっていただこうとUWSCの学習をしています。 以前は記録して使用したのですが不定期にマウス座標が変わるようになったため.UWSを書いてみてます。ど素人ですがやっと画像をファイルに格納して作業ができるまでになりました。 使用環境はwin7です。 質問内容ですが手間が多いのと説明がへたなのでプログラムより質問内容が理解できないほうが心配です。出来るだけ分っていただけるように頑張りますのでご教授お願いします。 画像A 画像B 画像C 以上がWEBブラウザ上に表示されたときに以下の作業をします。 オーダーフォームの利用規約同意[ボタン]、確認画像[ボタン]、購入画像[ボタン]を押下する。 どれが表示されてもオーダーフォームの作業が発生します。 ほかの質問で以下のような回答があったので参考にしたのですが繰り返し探してはくれるのですが オーダーフォームの作業を書くことができません。。 ≪転記≫ WHILE (TRUE) //WENDまで無限ループ IFB (CHKIMG("A.bmp")=TRUE) THEN CHKIMG("1.bmp") //「1」画像の座標を調べる BTN(LEFT, G_IMG_X, G_IMG_Y) ELSE IFB (CHKIMG("B.bmp")=TRUE) THEN CHKIMG("2.bmp") //「2」画像の座標を調べる BTN(LEFT, G_IMG_X, G_IMG_Y) ELSE ・・・以下略・・・ ENDIF WEND 自分でも頑張ってみますがご教授頂けると幸いです。 よろしくおねがいいたします。

  • UWSCでWEBをログインしてアウトするスプリクト

    UWSCにてWEBをログインしてボタンを押しログアウトするだけのスプリクトを作っています。 しかし、うまく回ってくれません。 切り分けて画像単体でスプリクトを組んだところ画像に問題はありませんでした。 ////////////////////////////////↓ここから Dim num //文字チェッカー Dim gazou //画像回し Dim mugen //画像ちぇっかー Dim bmp //画像用 num = 1 mugen = 1 gazou = 1 //画像判定 While gazou < 4 //全部回す SELECT gazou   CASE 1 bmp = "ログイン.bmp"   CASE 2 bmp = "ボタン.bmp"   CASE 3 bmp = "ログアウト.bmp" SELEND //判定終了 //画像が出るまで繰り返す While mugen < 2 //あるまで繰り返す Ifb chkimg(bmp) = true then // 画像判定 // ここから あった時 透過色 = 0 for i=0 to GETDIR(GET_CUR_DIR,bmp)-1   ifB CHKIMG(GETDIR_FILES[i] , 透過色 , 0 , 0 , 1280 , 800 ) > 0 Btn(Left, Click, G_IMG_X+5, G_IMG_Y+5)   mugen = mugen + 5 gazou = gazou + 1   Endif next // ここまで あった時 // ここから なかった時 else  sleep(0.2) // 待ち時間 // ここまで なかった時 Endif // 画像判定 終了 wend // あるまで繰り返す mugen = 1 // リセット ////////////////////////////////////////////////////////////////////////////////////////////// wend //画像(gazou)のwend

  • UWSCで指定箇所のみループ

    UWSCで指定した箇所へ戻ってループさせたいのですが、やり方がわかりません。 上手く説明ができないのですが… 例えば… while True Z地点 //Aの画像があればクリックしてX地点へ ifb CHKIMG("画像A") x=G_IMG_X y=G_IMG_Y BTN(LEFT, CLICK, x, y, 300) endif X地点 //Bの画像があればクリック、無ければZ地点へ戻る ifb CHKIMG("画像B") x=G_IMG_X y=G_IMG_Y BTN(LEFT, CLICK, x, y, 300) endif wend という感じで…、状況によってプログラムの指定した行へ移動させたいのですが どうすれば良いのでしょうか? 上手く説明できなくてすみませんが、教えてください。 よろしくお願いします。

  • UWSC画像認識で座標の位置がずれてしまいます。

    ifb CHKIMG( "XXX", -1, 0, 0, 0, 0, -1,  ) x=G_IMG_X // 画像の座標をxへ代入 y=G_IMG_Y // 画像の座標をyへ代入 endif パソコンを変えた途端にこの症状は発生しました。 x,yの変数をメッセージボックスで出しているのですが、実際の画像と異なった座標を指定していまいます。 他の座標ツールとは座標が異なっているのです。 画像をクリックしてみても、実際の画像の位置とは違う場所をクリックしてしまいます。 画像の座標は一番左上が表示されることは存じております。 グラフィックボードを実装しています。OSのバージョンは8.1です。 原因は何が考えられるでしょうか。ご教授お願いいたします。