tag:blogger.com,1999:blog-59023047884098627952024-02-19T14:28:39.785+09:00Android アプリ開発Androidのアプリの勉強中です。たんすhttp://www.blogger.com/profile/00632511548189625745noreply@blogger.comBlogger20125tag:blogger.com,1999:blog-5902304788409862795.post-36236855403409324662017-03-02T15:44:00.004+09:002023-11-08T09:32:40.051+09:00アプリケーションプライバシーポリシー<div><div>Article 1 (Definition)</div><div>This application privacy policy is provided by TansuG</div><div>This stipulates the handling of user information in smartphone applications.</div><div><br /></div><div>Article 2 (Items of information to be acquired, acquisition method, purpose of use, external transmission, provision to third parties, and presence or absence of an information collection module)</div><div>Please use the usage information described below to the extent necessary to achieve the following usage purposes.</div><div>Obtain registration information automatically via the application or manually entered by the user,</div><div>I will handle it.</div><div><br /></div><div>Location information using GPS function and other location information positioning functions</div><div>Acquisition method: Automatic acquisition by application</div><div>Purpose of use: To display on a map within this service.</div><div>External transmission, third party provision, presence of information collection module: None</div><div><br /></div><div>Writing data to SD card</div><div>Acquisition method: Automatic acquisition by application</div><div>Purpose of use: To save internal memory. To save setting information. For saving images.</div><div>External transmission, third party provision, presence of information collection module: None</div><div><br /></div><div>Bluetooth communication</div><div>Acquisition method: Automatic acquisition by application</div><div>Purpose of use: To provide communication services between devices.</div><div>External transmission, third party provision, presence of information collection module: None</div><div><br /></div><div>call recording</div><div>Acquisition method: Automatic acquisition by application</div><div>Purpose of use: To provide voice communication services between devices.</div><div>External transmission, third party provision, presence of information collection module: None</div><div><br /></div><div>Taking pictures and videos</div><div>Acquisition method: Automatic acquisition by application</div><div>Purpose of use: To provide video communication services between devices. . For taking pictures</div><div>External transmission, third party provision, presence of information collection module: None</div><div><br /></div><div>internet communication</div><div>Acquisition method: Automatic acquisition by application</div><div>Purpose of use: For advertising distribution.</div><div><br /></div><div>Article 3 (Termination of Service)</div><div>If the user deletes (uninstalls) the application and the service,</div><div>It is assumed that you have finished using the service.</div><div><br /></div><div>Article 4 (Consent)</div><div>1. Please read this privacy policy and understand its contents before using this application and this service. This privacy policy is published on the distribution site of this application and posted on this page, and is deemed to have been made public by this posting. Users should check this privacy policy when installing this application.</div><div><br /></div><div>Article 5 (Inquiry Desk)</div><div>Regarding the handling of user information in this application and this service,</div><div>Please contact us below.</div><div><br /></div><div>Email address: gtansu.tansug@gmail.com</div><div><br /></div><div>Article 6 (Changes)</div><div>This policy may be revised due to changes or version upgrades of each application and service.</div><div>If there are any changes to this policy, we will notify you on this page, so we recommend that you check this page from time to time for the latest information regarding changes. Please note that our company cannot be held responsible for any trouble caused by not checking.</div></div><div><br /></div>第1条(定義)<br />
このアプリケーション・プライバシーポリシーはTansuGが提供する<br />
スマートフォン用アプリケーションにおける利用者情報の取り扱いを定めたものです。<br />
<br />
第2条(取得される情報の項目、取得方法、利用目的、外部送信・第三者提供・情報収集モジュールの組込みの有無)<br />
次の利用目的の達成に必要な範囲で下記に記載する利用情報を<br />
アプリケーション経由で自動的に取得またはご利用者様の手入力による登録情報を取得し、<br />
取り扱います。<br />
<br />
GPS機能及びその他の位置情報測位機能を利用した位置情報<br />
取得方法:アプリケーションによる自動取得<br />
利用目的:本サービス内で地図上に表示する為。<br />
外部送信、第三者提供、情報収集モジュールの有無:ありません<br />
<br />
SDカードへのデータ書き込み<br />
取得方法:アプリケーションによる自動取得<br />
利用目的:内部メモリ節約の為。設定情報保存の為。画像の保存の為。<br />
外部送信、第三者提供、情報収集モジュールの有無:ありません<br />
<br />
Bluetooth通信<br />
取得方法:アプリケーションによる自動取得<br />
利用目的:端末間での通信サービスを提供するため。<br />
外部送信、第三者提供、情報収集モジュールの有無:ありません<br />
<br />
通話の録音<br />
取得方法:アプリケーションによる自動取得<br />
利用目的:端末間での音声通信サービスを提供するため。<br />
外部送信、第三者提供、情報収集モジュールの有無:ありません<br />
<br />
画像や動画の撮影<br />
取得方法:アプリケーションによる自動取得<br />
利用目的:端末間での動画通信サービスを提供するため。。画像の撮影の為<br />
外部送信、第三者提供、情報収集モジュールの有無:ありません<br />
<br />
インターネット通信<br />
取得方法:アプリケーションによる自動取得<br />
利用目的:広告配信の為。<br />
<br />
第3条(サービスの終了)<br />
アプリケーションおよびサービスは、ご利用者がアプリケーションの削除(アンインストール)された場合には、<br />
ご利用を終了されたものとします。<br />
<br />
第4条(同意)<br />
1.本アプリケーションおよび本サービスは、本プライバシーポリシーをご確認いただき、内容をご理解したうえでご利用ください。本プライバシーポリシーは本アプリケーションの配信サイトへ公開するとともに 、当ページ上に掲示されており、この掲示をもって公表したものとします。ご利用者は本アプリケーションをインストールする際に、本プライバシーポリシーをご確認ください。<br />
<br />
第5条(問い合わせ窓口)<br />
本アプリおよび本サービスにおける利用者情報の取扱いに関して、<br />
下記までご連絡くださいますようお願いします。<br />
<br />
メールアドレス:gtansu.tansug@gmail.com<br />
<br />
第6条(変更)<br />
本ポリシーは、各アプリ及び各サービスの変更やバージョンアップ等に伴い、改定することがあります。<br />
本ポリシーに変更がある場合には、当ページ上で告知しますので、お客様ご自身が変更点に関しての最新の情報を、当ページ上で随時確認されることを推奨します。確認をされていなかったことに起因するトラブルに関しては、当社は一切責任を負いかねますので予めご了承下さい。<br />
<div>
<br /></div>
たんすhttp://www.blogger.com/profile/00632511548189625745noreply@blogger.com0tag:blogger.com,1999:blog-5902304788409862795.post-53066864000227081662014-09-04T12:31:00.003+09:002014-09-05T07:59:23.614+09:00Android アプリ にっかぼうずAndroid アプリ<br />
<br />
にっかぼうず<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<span style="background-color: #fff9ee; color: #222222; font-family: Georgia, Utopia, 'Palatino Linotype', Palatino, serif; font-size: 15px; line-height: 21.559999465942383px;">GooglePlayに新しいアプリを登録しました。</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz1PUXg0-t0yA4NdqGMq1VUHaarhgPstt9v4b7hdwGvsJwind_iBFr-dciy-gG4_lb516gE5ZgCYetkIHX5b6fvstWAjDLA_icx7pKu8KefrZnwLbtU3XI56EF9haB6i1HdryhjWz_i8s/s1600/sensen.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz1PUXg0-t0yA4NdqGMq1VUHaarhgPstt9v4b7hdwGvsJwind_iBFr-dciy-gG4_lb516gE5ZgCYetkIHX5b6fvstWAjDLA_icx7pKu8KefrZnwLbtU3XI56EF9haB6i1HdryhjWz_i8s/s1600/sensen.png" height="312" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
GooglePlay ⇒ <a href="https://play.google.com/store/apps/details?id=gtansu.tansug.nikkabouzu">にっかぼうず</a></div>
<span style="background-color: whitesmoke; color: #333333; font-family: Roboto, Arial, sans-serif; font-size: 14px; line-height: 20px;">毎日続けようとしても三日坊主に・・・</span><br />
<span style="background-color: whitesmoke; color: #333333; font-family: Roboto, Arial, sans-serif; font-size: 14px; line-height: 20px;">そんなときに便利なアプリです。</span><br />
<div style="background-color: whitesmoke; border: 0px; color: #333333; font-family: Roboto, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-bottom: 5px; padding: 0px;">
通知時間の設定をすれば毎日その時間に知らせてくれます。</div>
<div style="background-color: whitesmoke; border: 0px; color: #333333; font-family: Roboto, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-bottom: 5px; padding: 0px;">
<span style="text-align: center;">日課を達成できればボタンを押して今日の分は達成!!</span></div>
<div style="background-color: whitesmoke; border: 0px; color: #333333; font-family: Roboto, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-bottom: 5px; padding: 0px;">
<span style="color: #333333; font-family: Roboto, Arial, sans-serif;">良かったらダウンロードしてください。</span></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<a href="http://android.app-liv.jp/" target="_blank">Androidアプリ発見プラットフォーム「Appliv」</a> <a href="http://android.app-liv.jp/001741141/" style="font-family: Roboto, Arial, sans-serif; font-size: 14px; line-height: 20px;">Appliv - にっかぼうず</a>たんすhttp://www.blogger.com/profile/00632511548189625745noreply@blogger.com0tag:blogger.com,1999:blog-5902304788409862795.post-19727887648534789502014-09-04T12:17:00.002+09:002014-09-04T12:17:47.030+09:00Android アプリ 貯金箱管理ツールAndroid アプリ<br />
<br />
貯金箱管理ツール<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<span style="background-color: #fff9ee; color: #222222; font-family: Georgia, Utopia, 'Palatino Linotype', Palatino, serif; font-size: 15px; line-height: 21.559999465942383px;">GooglePlayに新しいアプリを登録しました。</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeVa_UAiVqOyYtLYZg0ofu952mbQnRxGYcY68WgA3Ivdy3G9NalrNaJAWpWU0C6GDkwoUT1-VFj7MV_kmYSGM4EgnJrwdAnNORVhu-l3pCkl1QM7FQAwfMrX25iZbIZ_GuJ0-PAZRC9Og/s1600/senden.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeVa_UAiVqOyYtLYZg0ofu952mbQnRxGYcY68WgA3Ivdy3G9NalrNaJAWpWU0C6GDkwoUT1-VFj7MV_kmYSGM4EgnJrwdAnNORVhu-l3pCkl1QM7FQAwfMrX25iZbIZ_GuJ0-PAZRC9Og/s1600/senden.png" height="195" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
GooglePlay ⇒ <a href="https://play.google.com/store/apps/details?id=gtansu.tansug.savingmoney">貯金箱管理ツール</a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="background-color: whitesmoke; color: #333333; font-family: Roboto, Arial, sans-serif; font-size: 14px; line-height: 20px; text-align: left;">貯金箱の硬貨の枚数を記録できるアプリです。良かったらダウンロードしてください。</span></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<a href="http://android.app-liv.jp/" target="_blank">Androidアプリ発見プラットフォーム「Appliv」</a> <a href="http://android.app-liv.jp/001741142/" style="font-family: Roboto, Arial, sans-serif; font-size: 14px; line-height: 20px;">Appliv - 貯金箱管理ツール</a>たんすhttp://www.blogger.com/profile/00632511548189625745noreply@blogger.com0tag:blogger.com,1999:blog-5902304788409862795.post-4858047951159429542014-03-17T20:01:00.001+09:002014-03-17T20:01:03.084+09:00Android ダイアログ最近カスタムダイアログに凝っているのですが、少し詰まってしまいました。<br />
<br />
なぜカスタムダイアログに凝っているかというと<br />
標準のAlertDialogでは素っ気ないと感じていたので<br />
もっとオリジナリティあふれるものにしたいと思っていたからです。<br />
<br />
現在GooglePlayに登録しているアプリは、ほぼカスタムダイアログを使用しています。<br />
よかったらみてください。<br />
<br />
さて本題に戻すと、ストラックアウトのゲームを作ったとき<br />
スコアの表示をカスタムダイアログを用いて行っていたのですが<br />
どうせなら目立つものがいいと思い<br />
アニメーションを使いボールが常に回転しているようにしました。<br />
<br />
しかし、なぜか実機でのテストで動いてくれず解決方法がわからなかったので<br />
そのままの状態で完成させマ―ケットに登録<br />
<br />
その後もう一つの端末でプレイしてみると<br />
なぜか普通に動いていました・・・<br />
<br />
もしかしたらバージョンの問題なのかな?<br />
<br />
たんすhttp://www.blogger.com/profile/00632511548189625745noreply@blogger.com0tag:blogger.com,1999:blog-5902304788409862795.post-23509624424144612832014-03-17T19:47:00.003+09:002014-09-04T12:35:48.715+09:00Androidアプリ あみだつなぎGooglePlayに新しいアプリを登録しました。<br />
<br />
<a href="http://android.app-liv.jp/" target="_blank">ランキングとレビューから探せるAndroidアプリ情報サイト -Appliv</a><br />
<br />
<a href="http://android.app-liv.jp/001195821/">Appliv - あみだつなぎ</a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://play.google.com/store/apps/details?id=gtansu.tansug.amidatunagi">
</a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzoYH1UXz519JreY0-b1jT52YIlTcHck4o9H_wMtHDh3suI-mwkRwb0CtaN-nwx6Gko0wBxp0iWNb8iN4MLknKlmNnGtQaifiLF-JCsfi1CS8bgPL980TNDpS6CnyhX4RXsLu4By_zovo/s1600/webh.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzoYH1UXz519JreY0-b1jT52YIlTcHck4o9H_wMtHDh3suI-mwkRwb0CtaN-nwx6Gko0wBxp0iWNb8iN4MLknKlmNnGtQaifiLF-JCsfi1CS8bgPL980TNDpS6CnyhX4RXsLu4By_zovo/s1600/webh.png" height="312" width="640" /></a></div>
<a href="https://play.google.com/store/apps/details?id=gtansu.tansug.amidatunagi">https://play.google.com/store/apps/details?id=gtansu.tansug.amidatunagi</a> <br />
<br />
あみだくじの絵を揃える新感覚の頭脳ゲームです。<br />
操作は線を引くだけととても簡単なので誰でも楽しめます。<br />
<br />
よかったら遊んでみてください。<br />
<br />
<a href="https://androider.jp/devbanner/4810f0a41a39988bb94372d35c2b5e41/androider_certification.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="アンドロイダー公認デベロッパー認証" border="0" src="https://androider.jp/devbanner/4810f0a41a39988bb94372d35c2b5e41/androider_certification.png" /></a><br />
<br />たんすhttp://www.blogger.com/profile/00632511548189625745noreply@blogger.com0tag:blogger.com,1999:blog-5902304788409862795.post-24779775275606430462014-01-28T21:35:00.001+09:002014-09-04T12:19:55.127+09:00Android マインスイーパー<h2>
Android マインスイーパー</h2>
本日Google Playに自作アプリマインスイーパーを登録しました。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDWAvWeezHgJgEImsbmgFoaKnYX_3EBUDrLt6efLpjdLohBCD07ReOw_9CPO78Xfrxhwl-cLaugyoxIIlBxOfLt6JC-fSnTKgFfjGkYW-I_HT2BNOvsQo0TXBzbJ2-uJ0-HDh548wmF-M/s1600/senden2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDWAvWeezHgJgEImsbmgFoaKnYX_3EBUDrLt6efLpjdLohBCD07ReOw_9CPO78Xfrxhwl-cLaugyoxIIlBxOfLt6JC-fSnTKgFfjGkYW-I_HT2BNOvsQo0TXBzbJ2-uJ0-HDh548wmF-M/s1600/senden2.png" height="156" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<a href="https://play.google.com/store/apps/details?id=gtansu.tansug.suiper">https://play.google.com/store/apps/details?id=gtansu.tansug.suiper</a><br />
よかったらダウンロードしてください。<br />
<br />
<br />
<a href="http://android.app-liv.jp/" target="_blank">Androidアプリ発見サイト -Appliv</a> <a href="http://android.app-liv.jp/001511848/">Appliv - マインスイーパー</a>たんすhttp://www.blogger.com/profile/00632511548189625745noreply@blogger.com0tag:blogger.com,1999:blog-5902304788409862795.post-8037286330652562532014-01-23T23:46:00.001+09:002014-01-23T23:46:49.781+09:00Android レイアウト<h2>
Android レイアウト</h2>
画面の描画のボタンなどの見た目を自分でカスタマイズする方法です。<br />
<br />
layoutでそのまま貼り付けて使うと標準のままでまったく素っ気ないものになってしまします。今回はボタンの色をグラデーションを使用したものに変えてみます。<br />
<br />
button_shape.xml<br />
/*-------------------------------------------------------------------------------<br />
<br />
<?xml version="1.0" encoding="utf-8"?><br />
<shape<br /> xmlns:android="<a href="http://schemas.android.com/apk/res/android">http://schemas.android.com/apk/res/android</a>"<br /> android:shape="rectangle"><br /> <solid<br /> android:color="#bce2e8" /><br /> <corners android:radius="5dip" /> <br /> <gradient <br /> android:startColor="#f08300" //この色からグラデーションを開始<br /> android:endColor="#ea5506" //この色まで<br /> android:angle="270" //<br /> /><br /></shape><br />
<br />
---------------------------------------------------------------------------------------*/<br />
<br />
まずこのようなxmlファイルをdrawableなどに作ります。<br />
<gradient>で囲んだ範囲がグラデーションの設定<br />
<corners>で囲んだ範囲が角の丸みの設定をしています。<br />
<br />
次にボタンを配置するレイアウトの一部<br />
<br />
/*-----------------------------------------------------------------------------------<br />
<br />
<Button<br /> android:id="@+id/button2"<br /> android:layout_width="match_parent"<br /> android:layout_height="wrap_content"<br /> android:text="ボタン"<br /> <span style="color: blue;">android:background<span style="color: red;">="@drawable/button_shape</span>"</span>/><br />
<br />
<br />
----------------------------------------------------------------------------------*/<br />
<br />
backgroundのところを先ほど作成したものを指定します。<br />
これで作成したものが適用されボタンの背景が変わっています。<br />
<br />
<br />
<br />
たんすhttp://www.blogger.com/profile/00632511548189625745noreply@blogger.com1tag:blogger.com,1999:blog-5902304788409862795.post-59849347940425164002014-01-21T22:45:00.000+09:002014-01-21T22:45:16.725+09:00Android View<h2>
Android View</h2>
カメラからの画像を表示させその上に描画を行うとき普通に描画を行うとせっかくカメラから取り込んだものが見えなくなってしまいます。<br />
<br />
今回は描画を行うとき透明度を設定する方法です。<br />
<br />
/*-------------------------------------------------------------------------<br />
<br />
Canvas canvas;<br />
Paint paint = new Paint();<br />
<br />
paint.setStyle(Paint.Style.FILL);<br />paint.setColor(Color.parseColor("#7fff00"));<span style="color: #6aa84f;">//色の設定</span><br /><span style="color: red;">paint.setAlpha(40);</span><span style="color: #6aa84f;">//透明度の設定</span><br />
<span style="color: red;"></span><br />
canvas.drawRect( 0, 0, width, height,paint);<br />
<br />
----------------------------------------------------------------------------*/<br />
<br />
paint.setAlpha( * );で*の値を決めることで透明度を設定できます。<br />
<br />
値は0~255の間で0に近づくほど薄くなり255に近づくほど濃くなります。<br />
<br />
これで半透明の描画ができます。これでメーターみたいなものを描画し、カメラビューと組み合わせるとスカウターみたいな画面にすることもできます。たんすhttp://www.blogger.com/profile/00632511548189625745noreply@blogger.com0tag:blogger.com,1999:blog-5902304788409862795.post-65429093825852763592014-01-20T17:43:00.001+09:002014-01-20T17:43:57.245+09:00Android OpenCV 応用<h2>
Android OpenCV 応用</h2>
OpenCVを用いて輪郭の取得を行いましたが今回はその応用です。<br />
<br />
輪郭の取得を行いその中で最も大きい輪郭だけを表示する方法<br />
<br />
輪郭の取得は<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc"><strong><span style="color: red;">Imgproc</span></strong></a><strong><span style="color: red;">.findContours</span></strong>を用いますがその前に入力画像をシングルチャンネルに変換します。今回は肌色の部分だけが残るように抽出します。<br />
<br />
/*------------------------------------------------------------------------------------------------<br />
<br />
<span style="color: #999999;">@Override</span><br />
<span style="color: #4c1130;">public</span> Mat onCameraFrame(Mat inputFrame) {<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~findContours~Lorg.opencv.core.Mat;~Ljava.util.List%5C%3CLorg.opencv.core.MatOfPoint;%3E;~Lorg.opencv.core.Mat;~I~I%E2%98%82Mat"><span style="color: black;">Mat</span></a> image = <span style="color: #4c1130;">new</span> Mat();<br />
image = inputFrame;<br />
<br />
Imgproc.cvtColor(image , image , Imgproc.COLOR_RGB2HSV);<span style="color: #6aa84f;">//色空間をRGB→HSVに変換</span><br />
Core.inRange(image , new Scalar(0, 60, 80), new Scalar(25, 255, 255), image );<span style="color: #6aa84f;">//肌色抽出</span><br />
<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~findContours~Lorg.opencv.core.Mat;~Ljava.util.List%5C%3CLorg.opencv.core.MatOfPoint;%3E;~Lorg.opencv.core.Mat;~I~I%E2%98%82List"><span style="color: black;">List</span></a><<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~findContours~Lorg.opencv.core.Mat;~Ljava.util.List%5C%3CLorg.opencv.core.MatOfPoint;%3E;~Lorg.opencv.core.Mat;~I~I%E2%98%82MatOfPoint"><span style="color: black;">MatOfPoint</span></a>> contours = <span style="color: #4c1130;">new</span> ArrayList<MatOfPoint>();<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~findContours~Lorg.opencv.core.Mat;~Ljava.util.List%5C%3CLorg.opencv.core.MatOfPoint;%3E;~Lorg.opencv.core.Mat;~I~I%E2%98%82Mat"><span style="color: black;">Mat</span></a> hierarchy = Mat.zeros(new Size(5,5), CvType.CV_8UC1);<br />
<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc"><span style="color: black;">Imgproc</span></a>.findContours( image, contours, hierarchy,<br />
Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_TC89_L1);<br />
<br />
//途中<br />
}<br />
<br />
--------------------------------------------------------------------------------------------------*/<br />
<br />
ここまでで肌色の部分の輪郭を取得することができます。<br />
<br />
次にもっとも大きい輪郭=面積が一番大きいものなので<strong><span style="color: red;">Imgproc.contourArea</span></strong>を用いて各輪郭の面積を比較します。<br />
<br />
<br />
/*----------------------------------------------------------------------------------------------------<br />
<br />
<span style="color: #4c1130;">int</span> i=0;<br />
<span style="color: #4c1130;">double</span> maxarea = 0;<br />
if(contours.size()>0){<span style="color: #38761d;">//サイズが0の場合エラーになるので</span><br />
<span style="color: #4c1130;">while</span>(contours.size() != 1){<span style="color: #38761d;">//contoursが1つなるまで繰り返す</span><br />
<span style="color: #4c1130;"> if</span>(maxarea < Imgproc.contourArea(contours.get(i))){<span style="color: #38761d;">//maxareaより大きいか</span><br />
maxarea = Imgproc.contourArea(contours.get(i));<br />
contours.remove(0);<br />
i=1;<br />
}<span style="color: #4c1130;">else</span>{<br />
contours.remove(i);<br />
}<br />
}<br />
}<br />
<br />
----------------------------------------------------------------------------------------------*/<br />
<br />
まず輪郭の数が0の場合は無視するために<br />
if(contours.size()>0){}<br />
で0の場合は処理しないようにします。<br />
<br />
次に輪郭の数が1つだけならばその輪郭が1番大きいので<br />
<span style="color: #4c1130;">while</span>(contours.size() != 1){}<br />
で輪郭が1つの場合ループを抜けるようにします。<br />
<br />
ループの中は<br />
contours.get(i)でi番目の輪郭の情報が取れるので<br />
Imgproc.contourArea(contours.get(i))で輪郭の面積を出します。<br />
<br />
※maxareaより大きい場合はその輪郭の面積をmaxareaに代入し、1番初めにある輪郭を消去します。<br />
それ以外の場合はその輪郭を消去します。<br />
<br />
※を輪郭が1つになるまで処理を繰り返すと残った輪郭が1番大きい輪郭となります。そして輪郭が1つだけなのでループを抜けすべての処理が終わります。<br />
<br />
<br />
<br />
<br />
<br />たんすhttp://www.blogger.com/profile/00632511548189625745noreply@blogger.com1tag:blogger.com,1999:blog-5902304788409862795.post-68850927296324995202014-01-19T15:17:00.002+09:002014-01-20T10:26:12.322+09:00Android OpenCV 円検出<h2>
Android OpenCV 円検出</h2>
前回の記事 直線検出では直線の検出をしましたが今回は円の検出をしたいと思います。<br />
<br />
円の検出には以下の関数を用いることでできます。(OpenCV リファレンス参照)<br />
<br />
<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=GLL/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc"><span style="color: black;">Imgproc</span></a>.HoughCircles(<a class="header" href="eclipse-javadoc:%E2%98%82=GLL/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~HoughCircles~Lorg.opencv.core.Mat;~Lorg.opencv.core.Mat;~I~D~D~D~D~I~I%E2%98%82Mat"><span style="color: black;">Mat</span></a>
image, <a class="header" href="eclipse-javadoc:%E2%98%82=GLL/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~HoughCircles~Lorg.opencv.core.Mat;~Lorg.opencv.core.Mat;~I~D~D~D~D~I~I%E2%98%82Mat"><span style="color: black;">Mat</span></a>
circles, int method, double dp, double minDist, double param1, double param2,
int minRadius, int maxRadius)<br />
<br />
<table class="docutils field-list" frame="void" rules="none"><tbody valign="top">
<tr class="field-odd field"><th class="field-name"></th><td class="field-body"><ul class="first last simple">
<li><strong>image</strong> – 8ビット,シングルチャンネル,グレースケールの入力画像.</li>
<li><strong>circles</strong> – 検出された円を出力するベクトル.各ベクトルは,3要素の浮動小数点型ベクトル <img alt="(x, y, radius)" class="math" src="http://opencv.jp/opencv-2svn/cpp/_images/math/597697addc29342e3b0fe01206c94e9cb52c169e.png" /> としてエンコードされます.</li>
<li><strong>method</strong> – 現在のところ, <tt class="docutils literal"><span class="pre">CV_HOUGH_GRADIENT</span></tt> メソッドのみが実装されています.基本的には <em>2段階ハフ変換</em> で,これについては Yuen90 で述べられています.</li>
<li><strong>dp</strong> – 画像分解能に対する投票分解能の比率の逆数.例えば, <tt class="docutils literal"><span class="pre">dp=1</span></tt> の場合は,投票空間は入力画像と同じ分解能をもちます.また <tt class="docutils literal"><span class="pre">dp=2</span></tt> の場合は,投票空間の幅と高さは半分になります.</li>
<li><strong>minDist</strong> – 検出される円の中心同士の最小距離.このパラメータが小さすぎると,正しい円の周辺に別の円が複数誤って検出されることになります.逆に大きすぎると,検出できない円がでてくる可能性があります.</li>
<li><strong>param1</strong> – 手法依存の 1 番目のパラメータ. <tt class="docutils literal"><span class="pre">CV_HOUGH_GRADIENT</span></tt> の場合は, <tt class="xref py py-func docutils literal"><span class="pre">Canny()</span></tt> エッジ検出器に渡される2つの閾値の内,大きい方の閾値を表します(小さい閾値は,この値の半分になります).</li>
<li><strong>param2</strong> – 手法依存の 2 番目のパラメータ. <tt class="docutils literal"><span class="pre">CV_HOUGH_GRADIENT</span></tt> の場合は,円の中心を検出する際の投票数の閾値を表します.これが小さくなるほど,より多くの誤検出が起こる可能性があります.より多くの投票を獲得した円が,最初に出力されます.</li>
<li><strong>minRadius</strong> – 円の半径の最小値.</li>
<li><strong>maxRadius</strong> – 円の半径の最大値.</li>
</ul>
<br />
<br />
直線の時は輪郭(エッジ)の画像に変換してから直線を取得しましたが円検出の場合はぼかし(平滑化)を行ってから検出するほうが誤検出起こりにくいみたいです。ですが、実際にやってみた結果あまり変化がないというよりは平滑化するとほぼ円を認識しなくなり確かに誤検出は減りますが円を認識してもらわないと困るので誤検出が多い場合のみ使用したほうがよさそうです。<br />
<br />
/*-----------------------------------------------------------------------<br />
<br />
Mat src;<br />
Mat dst;<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=GLL/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc"><span style="color: black;">Imgproc</span></a>.cvtColor(src, dst, Imgproc.COLOR_RGB2GRAY);<br />
<br />
<span class="n">GaussianBlur</span><span class="p">(</span> dst<span class="p">,</span> dst<span class="p">,</span> <span class="n">Size</span><span class="p">(</span><span class="mi">9</span><span class="p">,</span> <span class="mi">9</span><span class="p">),</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">2</span> <span class="p">);<span style="color: #38761d;">//←別になくてもよい</span></span><br />
<br />
Mat image = dst;<br />
Mat lines;<br />
Imgproc.HoughLinesP(image, lines, Imgproc.CV_HOUGH_GRADIENT, 2, 10, 160, 50, 50, 120);<br />
<br />
--------------------------------------------------------------------------------------------------*/<br />
<br />
</td></tr>
</tbody></table>
たんすhttp://www.blogger.com/profile/00632511548189625745noreply@blogger.com0tag:blogger.com,1999:blog-5902304788409862795.post-45707301825842494422014-01-19T14:44:00.002+09:002014-01-20T10:26:33.216+09:00Android OpenCV 直線検出<h2>
Android OpenCV 直線検出</h2>
輪郭の抽出などをやってきましたが今回は直線についてやりたいと思います。<br />
<br />
直線検出には<br />
<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=GLL/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc"><span style="color: black;">Imgproc</span></a>.HoughLines(<a class="header" href="eclipse-javadoc:%E2%98%82=GLL/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~HoughLines~Lorg.opencv.core.Mat;~Lorg.opencv.core.Mat;~D~D~I~D~D%E2%98%82Mat"><span style="color: black;">Mat</span></a>
image, <a class="header" href="eclipse-javadoc:%E2%98%82=GLL/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~HoughLines~Lorg.opencv.core.Mat;~Lorg.opencv.core.Mat;~D~D~I~D~D%E2%98%82Mat"><span style="color: black;">Mat</span></a>
lines, double rho, double theta, int threshold, double srn, double stn)<br />
<table class="docutils field-list" frame="void" rules="none"><tbody valign="top">
<tr class="field-odd field"><th class="field-name"></th><td class="field-body"><ul class="first last simple">
<li><strong>image</strong> – 8ビット,シングルチャンネルの2値入力画像.この画像は関数により書き換えられる可能性があります.</li>
<li><strong>lines</strong> – 検出された直線が出力されるベクトル.各直線は,2要素のベクトル <img alt="(\rho, \theta)" class="math" src="http://opencv.jp/opencv-2svn/cpp/_images/math/f1459a92b92542485c95d273a0aa529dc4ecb6ac.png" /> で表現されます. <img alt="\rho" class="math" src="http://opencv.jp/opencv-2svn/cpp/_images/math/0027034d8a10372a06deaf4f4084c01956587479.png" /> は原点(画像の左上コーナー)からの距離, <img alt="\theta" class="math" src="http://opencv.jp/opencv-2svn/cpp/_images/math/52e8ed7a3ba22130ad3984eb2cd413406475a689.png" /> はラジアン単位で表される直線の回転角度(0 <img alt="\sim" class="math" src="http://opencv.jp/opencv-2svn/cpp/_images/math/e55156a4008b0944ad00d5bc71bc5aa6315aabb7.png" /> 垂直線, <img alt="\pi/2 \sim" class="math" src="http://opencv.jp/opencv-2svn/cpp/_images/math/75b21e10ffe639554f6fd9f1c4b209b510ebd9f0.png" /> 水平線)です.</li>
<li><strong>rho</strong> – ピクセル単位で表される投票空間の距離分解能.</li>
<li><strong>theta</strong> – ラジアン単位で表される投票空間の角度分解能.</li>
<li><strong>threshold</strong> – 投票の閾値パラメータ.十分な票( <img alt=">\texttt{threshold}" class="math" src="http://opencv.jp/opencv-2svn/cpp/_images/math/6137700db6e8e9a225e8c6b0d688661726f622a6.png" /> )を得た直線のみが出力されます.</li>
<li><strong>srn</strong> – マルチスケールハフ変換において,距離分解能 <tt class="docutils literal"><span class="pre">rho</span></tt> の除数となる値.投票空間の粗い距離分解能は <tt class="docutils literal"><span class="pre">rho</span></tt> となり,細かい分解能は <tt class="docutils literal"><span class="pre">rho/srn</span></tt> となります.もし <tt class="docutils literal"><span class="pre">srn=0</span></tt> かつ <tt class="docutils literal"><span class="pre">stn=0</span></tt> の場合は,古典的ハフ変換が利用されます.そうでない場合は,両方のパラメータが正値である必要があります.</li>
<li><strong>stn</strong> – マルチスケールハフ変換において,角度分解能 <tt class="docutils literal"><span class="pre">theta</span></tt> の除数となる値.</li>
</ul>
</td></tr>
</tbody></table>
<br />
<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=GLL/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc"><span style="color: black;">Imgproc</span></a>.HoughLinesP(<a class="header" href="eclipse-javadoc:%E2%98%82=GLL/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~HoughLinesP~Lorg.opencv.core.Mat;~Lorg.opencv.core.Mat;~D~D~I~D~D%E2%98%82Mat"><span style="color: black;">Mat</span></a>
image, <a class="header" href="eclipse-javadoc:%E2%98%82=GLL/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~HoughLinesP~Lorg.opencv.core.Mat;~Lorg.opencv.core.Mat;~D~D~I~D~D%E2%98%82Mat"><span style="color: black;">Mat</span></a>
lines, double rho, double theta, int threshold, double minLineLength, double
maxLineGap)<br />
<table class="docutils field-list" frame="void" rules="none"><tbody valign="top">
<tr class="field-odd field"><th class="field-name"></th><td class="field-body"><ul class="first last simple">
<li><strong>image</strong> – 8ビット,シングルチャンネルの2値入力画像.この画像は関数により書き換えられる可能性があります.</li>
<li><strong>lines</strong> – 検出された線分が出力されるベクトル.各線分は,4要素のベクトル <img alt="(x_1, y_1, x_2, y_2)" class="math" src="http://opencv.jp/opencv-2svn/cpp/_images/math/ebf41cd6a7ab1c72b6a1e6cbcc00f2af3663d249.png" /> で表現されます.ここで <img alt="(x_1,y_1)" class="math" src="http://opencv.jp/opencv-2svn/cpp/_images/math/b354638f824de285dce6d6d3f72163cb287aeff7.png" /> および <img alt="(x_2, y_2)" class="math" src="http://opencv.jp/opencv-2svn/cpp/_images/math/574cd26ba0fbfb46272d82eb95420c5fdbc53546.png" /> は,検出された各線分の端点です.</li>
<li><strong>rho</strong> – ピクセル単位で表される投票空間の距離分解能.</li>
<li><strong>theta</strong> – ラジアン単位で表される投票空間の角度分解能.</li>
<li><strong>threshold</strong> – 投票の閾値パラメータ.十分な票( <img alt=">\texttt{threshold}" class="math" src="http://opencv.jp/opencv-2svn/cpp/_images/math/6137700db6e8e9a225e8c6b0d688661726f622a6.png" /> )を得た直線のみが出力されます.</li>
<li><strong>minLineLength</strong> – 最小の線分長.これより短い線分は棄却されます.</li>
<li><strong>maxLineGap</strong> – 2点が同一線分上にあると見なす場合に許容される最大距離.</li>
</ul>
を用いることでできます。(OpenCV リファレンス参照)<br />
<br />
直線を取得する前に輪郭(エッジ)の画像に変換してから直線を取得します。<br />
<br />
/*-----------------------------------------------------------------------<br />
<br />
Mat src;<br />
Mat dst;<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=GLL/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc"><span style="color: black;">Imgproc</span></a>.cvtColor(src, dst, Imgproc.COLOR_RGB2GRAY);<br />
<br />
Mat image = dst;<br />
Mat edges;<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=GLL/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc"><span style="color: black;">Imgproc</span></a>.Canny( image, edges, 80, 100);<br />
<br />
Mat image2 = edges;<br />
Mat lines;<br />
Imgproc.HoughLinesP(image, lines, 1, Math.PI / 180 , 50, 100 ,10);<br />
<br />
--------------------------------------------------------------------------------------------------*/<br />
</td></tr>
</tbody></table>
たんすhttp://www.blogger.com/profile/00632511548189625745noreply@blogger.com0tag:blogger.com,1999:blog-5902304788409862795.post-15974177316759395292014-01-19T13:45:00.002+09:002014-01-20T10:27:45.627+09:00Android OpenCV ぼかし<h2>
Android OpenCV ぼかし</h2>
<span style="color: blue;">Android-OpenCV 輪郭抽出(2) </span>のおまけ<br />
OpenCVで輪郭を抽出するときノイズなどが入ってしまい期待しているような輪郭が得られない場合があります。<br />
<br />
画像をぼかすことでノイズの影響を減らすことができます。<br />
<br />
画像をぼかす(平滑化)には以下の関数(OpenCVリファレンスを参考)<br />
<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc"><span style="color: black;">Imgproc</span></a>.GaussianBlur(<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~GaussianBlur~Lorg.opencv.core.Mat;~Lorg.opencv.core.Mat;~Lorg.opencv.core.Size;~D~D%E2%98%82Mat"><span style="color: black;">Mat</span></a>
src, <a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~GaussianBlur~Lorg.opencv.core.Mat;~Lorg.opencv.core.Mat;~Lorg.opencv.core.Size;~D~D%E2%98%82Mat"><span style="color: black;">Mat</span></a>
dst, <a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~GaussianBlur~Lorg.opencv.core.Mat;~Lorg.opencv.core.Mat;~Lorg.opencv.core.Size;~D~D%E2%98%82Size"><span style="color: black;">Size</span></a>
ksize, double sigmaX, double sigmaY)<br />
<li><strong>src</strong> – 入力画像.</li>
<li><strong>dst</strong> – <tt class="docutils literal"><span class="pre">src</span></tt> と同じサイズ,同じ型の出力画像.</li>
<li><strong>ksize</strong> – ガウシアンカーネルサイズ. <tt class="docutils literal"><span class="pre">ksize.width</span></tt> と <tt class="docutils literal"><span class="pre">ksize.height</span></tt> は別の値を取ることができますが,両方とも正の奇数でなければいけません.または 0 をとることも可能で,その場合のサイズは <tt class="docutils literal"><span class="pre">sigma*</span></tt> から算出されます.</li>
<li><strong>sigmaY</strong> (<em>sigmaX,</em>) – ガウシアンカーネルの,XとY方向の標準偏差. <tt class="docutils literal"><span class="pre">sigmaY</span></tt> が 0 ならば, <tt class="docutils literal"><span class="pre">sigmaX</span></tt> と等しくなるようにセットされます.両方の値が 0 の場合は,それぞれ <tt class="docutils literal"><span class="pre">ksize.width</span></tt> と <tt class="docutils literal"><span class="pre">ksize.height</span></tt> から求められます. <tt class="xref py py-func docutils literal"><span class="pre">getGaussianKernel()</span></tt> を参照してください.将来これらの引数の意味が変更されたとしても,それに関係なく結果を完全に制御するために, <tt class="docutils literal"><span class="pre">ksize</span></tt> , <tt class="docutils literal"><span class="pre">sigmaX</span></tt> および <tt class="docutils literal"><span class="pre">sigmaY</span></tt> のすべての値を指定することが推奨されます.</li>
<li><strong>borderType</strong> – ピクセル外挿手法. <tt class="xref py py-func docutils literal"><span class="pre">borderInterpolate()</span></tt> を参照してください.</li>
<br />
.<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc"><span style="color: black;">Imgproc</span></a>.medianBlur(<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~medianBlur~Lorg.opencv.core.Mat;~Lorg.opencv.core.Mat;~I%E2%98%82Mat"><span style="color: black;">Mat</span></a>
src, <a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~medianBlur~Lorg.opencv.core.Mat;~Lorg.opencv.core.Mat;~I%E2%98%82Mat"><span style="color: black;">Mat</span></a>
dst, int ksize)<br />
<li><strong>src</strong> – 1-, 3- あるいは 4-チャンネルの入力画像. <tt class="docutils literal"><span class="pre">ksize</span></tt> が 3 または 5 ならば,この画像のビット深度は <tt class="docutils literal"><span class="pre">CV_8U</span></tt> , <tt class="docutils literal"><span class="pre">CV_16U</span></tt> または <tt class="docutils literal"><span class="pre">CV_32F</span></tt> となります.それ以上のアパーチャサイズの場合は <tt class="docutils literal"><span class="pre">CV_8U</span></tt> だけが可能です.</li>
<li><strong>dst</strong> – <tt class="docutils literal"><span class="pre">src</span></tt> と同じサイズ,同じ型の出力画像.</li>
<li><strong>ksize</strong> – アパーチャサイズ.1より大きな奇数,例えば 3, 5, 7 ... でなければいけません.</li>
<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc"><span style="color: black;">Imgproc</span></a>.boxFilter(<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~boxFilter~Lorg.opencv.core.Mat;~Lorg.opencv.core.Mat;~I~Lorg.opencv.core.Size;~Lorg.opencv.core.Point;~Z~I%E2%98%82Mat"><span style="color: black;">Mat</span></a>
src, <a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~boxFilter~Lorg.opencv.core.Mat;~Lorg.opencv.core.Mat;~I~Lorg.opencv.core.Size;~Lorg.opencv.core.Point;~Z~I%E2%98%82Mat"><span style="color: black;">Mat</span></a>
dst, int ddepth, <a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~boxFilter~Lorg.opencv.core.Mat;~Lorg.opencv.core.Mat;~I~Lorg.opencv.core.Size;~Lorg.opencv.core.Point;~Z~I%E2%98%82Size"><span style="color: black;">Size</span></a>
ksize, <a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~boxFilter~Lorg.opencv.core.Mat;~Lorg.opencv.core.Mat;~I~Lorg.opencv.core.Size;~Lorg.opencv.core.Point;~Z~I%E2%98%82Point"><span style="color: black;">Point</span></a>
anchor, boolean normalize, int borderType)<br />
<table class="docutils field-list" frame="void" rules="none"><tbody valign="top">
<tr class="field-odd field"><th class="field-name"></th><td class="field-body"><ul class="first last simple">
<li><strong>src</strong> – 入力画像.</li>
<li><strong>dst</strong> – <tt class="docutils literal"><span class="pre">src</span></tt> と同じサイズ,同じ型の出力画像.</li>
<li><strong>ksize</strong> – 平滑化カーネルのサイズ.</li>
<li><strong>anchor</strong> – アンカー点.デフォルト値の <tt class="docutils literal"><span class="pre">Point(-1,-1)</span></tt> は,アンカーがカーネル中心にあることを意味します.</li>
<li><strong>normalize</strong> – カーネルが面積で正規化されているか否かを指定します.</li>
<li><strong>borderType</strong> – 画像外のピクセルを外挿するために利用される境界モード.</li>
</ul>
</td></tr>
</tbody></table>
<br />
<br />
のいずれかを使うことでできます。<br />
<br />
<br />
/*------------------------------------------------------------------------------------<br />
<br />
Mat src;<br />
Mat dst;<br />
<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc"><span style="color: black;">Imgproc</span></a>.GaussianBlur( src, dst, new Size(5,3), 6, 4);<br />
<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~findContours~Lorg.opencv.core.Mat;~Ljava.util.List%5C%3CLorg.opencv.core.MatOfPoint;%3E;~Lorg.opencv.core.Mat;~I~I%E2%98%82Mat"><span style="color: black;">Mat</span></a> image = dst;<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~findContours~Lorg.opencv.core.Mat;~Ljava.util.List%5C%3CLorg.opencv.core.MatOfPoint;%3E;~Lorg.opencv.core.Mat;~I~I%E2%98%82List"><span style="color: black;">List</span></a><<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~findContours~Lorg.opencv.core.Mat;~Ljava.util.List%5C%3CLorg.opencv.core.MatOfPoint;%3E;~Lorg.opencv.core.Mat;~I~I%E2%98%82MatOfPoint"><span style="color: black;">MatOfPoint</span></a>> contours;<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~findContours~Lorg.opencv.core.Mat;~Ljava.util.List%5C%3CLorg.opencv.core.MatOfPoint;%3E;~Lorg.opencv.core.Mat;~I~I%E2%98%82Mat"><span style="color: black;">Mat</span></a> hierarchy;<br />
<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc"><span style="color: black;">Imgproc</span></a>.findContours( image, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_TC89_L1);<br />
<br />
--------------------------------------------------------------------------------------------------*/<br />
<br />
これでノイズを軽減した画像から輪郭の抽出ができます。精度が上がりますが処理が多くなるので場合によって使い分けるほうがいいのかもしれません。たんすhttp://www.blogger.com/profile/00632511548189625745noreply@blogger.com0tag:blogger.com,1999:blog-5902304788409862795.post-46565673373104233912014-01-19T11:34:00.000+09:002014-12-28T08:58:08.283+09:00Android SurfaceView 背景透過描画<h2>
Android SurfaceView 背景透過描画</h2>
Androidで画面の描画を行うときViewを用いて図形や画像などの描画ができます。タッチをした時だけだったり一定時間毎に画面の更新がない場合はViewで大丈夫ですが、ゲームなどで一定時間ごとに画面の更新がある場合はSurfaceViewを用います。<br />
<br />
そこで一番困ったことがSurfaceViewを用いて描画を行うとその描画が残ってしまいます。<br />
ゲームなどの描画ではループの始まりに背景を書き直すことで対処できますが、カメラからのビューを背景に用いて描画を重ねて表示する場合リセットするために全体を白色などで塗りつぶしてしまっては意味がありません。<br />
<br />
そこで透過をしながら画面をリセットするためには<br />
<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/android-sdk-windows%5C/platforms%5C/android-18%5C/android.jar%3Candroid.graphics(Canvas.class%E2%98%83Canvas"><span style="color: #cc0000;">Canvas</span></a><span style="color: #cc0000;">.drawColor(int
color, </span><a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/android-sdk-windows%5C/platforms%5C/android-18%5C/android.jar%3Candroid.graphics(Canvas.class%E2%98%83Canvas~drawColor~I~Landroid.graphics.PorterDuff$Mode;%E2%98%82Mode"><span style="color: #cc0000;">Mode</span></a><span style="color: #cc0000;">
mode)</span>を使います。<br />
<br />
引数にcolor Color.TRANSPARENT,mode PorterDuff.Mode.CLEAR指定することによって透過をしながら画面をリセットできます。<br />
<br />
<br />
/*----------------------------------------------------------------------------<br />
@Override<br />
public void run() {<br />
<br />
while(true){<br />
try {<br />
Canvas canvas = surfaceholder.lockCanvas();<br />
<br />
<span style="color: red;">canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);</span><br />
<span style="color: red;"><br /></span>
<span style="color: red;"> /*</span><br />
<span style="color: red;"> 描画処理・・・</span><br />
<span style="color: red;"> */</span><br />
<br />
surfaceholder.unlockCanvasAndPost(canvas);<br />
<br />
Thread.sleep(50);<br />
} catch (InterruptedException e) {<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
<br />
---------------------------------------------------------------------------------*/たんすhttp://www.blogger.com/profile/00632511548189625745noreply@blogger.com0tag:blogger.com,1999:blog-5902304788409862795.post-10496516164965578402014-01-18T13:34:00.000+09:002014-01-20T10:29:56.585+09:00Android-OpenCV 輪郭抽出(2)<h2>
Android-OpenCV 輪郭抽出(2)</h2>
前回の記事 Android-OpenCV 輪郭抽出でCannyを使用した輪郭抽出を行いましたが今回はさらに抽出した輪郭の情報も取得したいと思います。<br />
<br />
輪郭の情報を取得するには<br />
<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc"><span style="color: black;">Imgproc</span></a>.findContours(<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~findContours~Lorg.opencv.core.Mat;~Ljava.util.List%5C%3CLorg.opencv.core.MatOfPoint;%3E;~Lorg.opencv.core.Mat;~I~I%E2%98%82Mat"><span style="color: black;">Mat</span></a>
image, <a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~findContours~Lorg.opencv.core.Mat;~Ljava.util.List%5C%3CLorg.opencv.core.MatOfPoint;%3E;~Lorg.opencv.core.Mat;~I~I%E2%98%82List"><span style="color: black;">List</span></a><<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~findContours~Lorg.opencv.core.Mat;~Ljava.util.List%5C%3CLorg.opencv.core.MatOfPoint;%3E;~Lorg.opencv.core.Mat;~I~I%E2%98%82MatOfPoint"><span style="color: black;">MatOfPoint</span></a>>
contours, <a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~findContours~Lorg.opencv.core.Mat;~Ljava.util.List%5C%3CLorg.opencv.core.MatOfPoint;%3E;~Lorg.opencv.core.Mat;~I~I%E2%98%82Mat"><span style="color: black;">Mat</span></a>
hierarchy, int mode, int method)<br />
<table class="docutils field-list" frame="void" rules="none"><tbody valign="top">
<tr class="field-odd field"><th class="field-name"></th><td class="field-body"><ul class="first last simple">
<li><strong>image</strong> – 入力画像,8ビット,シングルチャンネル.0以外のピクセルは 1として,0のピクセルは0のまま扱われます.つまり,入力画像は <tt class="docutils literal"><span class="pre">2値画像</span></tt> として扱われます.グレースケールやカラー画像から2値画像を得るには, <tt class="xref py py-func docutils literal"><span class="pre">compare()</span></tt> , <tt class="xref py py-func docutils literal"><span class="pre">inRange()</span></tt> , <tt class="xref py py-func docutils literal"><span class="pre">threshold()</span></tt> , <tt class="xref py py-func docutils literal"><span class="pre">adaptiveThreshold()</span></tt> , <tt class="xref py py-func docutils literal"><span class="pre">Canny()</span></tt> などの関数を利用します.また,この関数は,輪郭抽出処理中に入力画像 <tt class="docutils literal"><span class="pre">image</span></tt> の中身を書き換えます.</li>
<li><strong>contours</strong> – 検出された輪郭.各輪郭は,点のベクトルとして格納されます.</li>
<li><strong>hiararchy</strong> – オプション.画像のトポロジーに関する情報を含む出力ベクトル.これは,輪郭数と同じ数の要素を持ちます.各輪郭 <tt class="docutils literal"><span class="pre">contours[i]</span></tt> に対して,要素 <tt class="docutils literal"><span class="pre">hierarchy[i][0]</span></tt> , <tt class="docutils literal"><span class="pre">hiearchy[i][1]</span></tt> , <tt class="docutils literal"><span class="pre">hiearchy[i][2]</span></tt> , <tt class="docutils literal"><span class="pre">hiearchy[i][3]</span></tt> にはそれぞれ,同じ階層レベルに存在する前後の輪郭,最初の子輪郭,および親輪郭の <tt class="docutils literal"><span class="pre">contours</span></tt> インデックス(0 基準)がセットされます.また,輪郭 <tt class="docutils literal"><span class="pre">i</span></tt> において,前後,親,子の輪郭が存在しない場合,それに対応する <tt class="docutils literal"><span class="pre">hierarchy[i]</span></tt> の要素は,負の値になります.</li>
<li><strong>mode</strong> – 輪郭抽出モード<br />
<ul>
<li><strong>CV_RETR_EXTERNAL</strong> 最も外側の輪郭のみを抽出します.すべての輪郭に対して <tt class="docutils literal"><span class="pre">hierarchy[i][2]=hierarchy[i][3]=-1</span></tt> がセットされます.</li>
<li><strong>CV_RETR_LIST</strong> すべての輪郭を抽出しますが,一切の階層構造を保持しません.</li>
<li><strong>CV_RETR_CCOMP</strong> すべての輪郭を抽出し,それらを2階層構造として保存します:上のレベルには,連結成分の外側の境界線が,下のレベルには,連結成分の内側に存在する穴の境界線が属します.ある連結成分の穴の内側に別の輪郭が存在する場合,その穴は上のレベルに属します.</li>
<li><strong>CV_RETR_TREE</strong> すべての輪郭を抽出し,入れ子構造になった輪郭を完全に表現する階層構造を構成します.この完全な階層構造は,OpenCVの <tt class="docutils literal"><span class="pre">contours.c</span></tt> デモで見ることができます.</li>
</ul>
</li>
<li><strong>method</strong> – 輪郭の近似手法:<br />
<ul>
<li><strong>CV_CHAIN_APPROX_NONE</strong> すべての輪郭点を完全に格納します.つまり,この手法により格納された任意の隣り合う2点は,互いに8近傍に存在します.</li>
<li><strong>CV_CHAIN_APPROX_SIMPLE</strong> 水平・垂直・斜めの線分を圧縮し,それらの端点のみを残します.例えば,まっすぐな矩形の輪郭線は,4つの点にエンコードされます.</li>
<li><strong>CV_CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS</strong> Teh-Chinチェーン近似アルゴリズムの1つを適用します. TehChin89 を参照してください.</li>
</ul>
</li>
<li><strong>offset</strong> – オプションのオフセット.各輪郭点はこの値の分だけシフトします.これは,ROIの中で抽出された輪郭を,画像全体に対して位置づけて解析する場合に役立ちます.</li>
</ul>
</td></tr>
</tbody></table>
<br />
を用います。(OpenCV リファレンス参照)<br />
<br />
今回は<br />
mode <strong>Imgproc.RETR_EXTERNAL</strong>(最も外側の輪郭のみを抽出),<br />
method <strong>Imgproc.CHAIN_APPROX_TC89_L1</strong>(Teh-Chinチェーン近似アルゴリズムの1つを適用します)<br />
を指定します。<br />
<br />
/*------------------------------------------------------------------------------------------------<br />
<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~findContours~Lorg.opencv.core.Mat;~Ljava.util.List%5C%3CLorg.opencv.core.MatOfPoint;%3E;~Lorg.opencv.core.Mat;~I~I%E2%98%82Mat"><span style="color: black;">Mat</span></a> image;<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~findContours~Lorg.opencv.core.Mat;~Ljava.util.List%5C%3CLorg.opencv.core.MatOfPoint;%3E;~Lorg.opencv.core.Mat;~I~I%E2%98%82List"><span style="color: black;">List</span></a><<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~findContours~Lorg.opencv.core.Mat;~Ljava.util.List%5C%3CLorg.opencv.core.MatOfPoint;%3E;~Lorg.opencv.core.Mat;~I~I%E2%98%82MatOfPoint"><span style="color: black;">MatOfPoint</span></a>> contours;<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~findContours~Lorg.opencv.core.Mat;~Ljava.util.List%5C%3CLorg.opencv.core.MatOfPoint;%3E;~Lorg.opencv.core.Mat;~I~I%E2%98%82Mat"><span style="color: black;">Mat</span></a> hierarchy;<br />
<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc"><span style="color: black;">Imgproc</span></a>.findContours( image, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_TC89_L1);<br />
<br />
--------------------------------------------------------------------------------------------------*/<br />
<br />
これで入力画像から抽出した輪郭の情報が取得できます。<br />
<br />
取得した輪郭の情報はcontoursに入っています。たんすhttp://www.blogger.com/profile/00632511548189625745noreply@blogger.com0tag:blogger.com,1999:blog-5902304788409862795.post-69948997567999919792014-01-18T12:44:00.000+09:002014-01-20T10:30:06.226+09:00Android-OpenCV 輪郭抽出<h2>
Android OpenCV 輪郭抽出</h2>
<br />
今回は取り込んだ画像の輪郭を検出する方法です。<br />
<br />
輪郭(エッジ)の表示は<br />
<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=GLL/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc"><span style="color: black;">Imgproc</span></a>.Canny(<a class="header" href="eclipse-javadoc:%E2%98%82=GLL/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~Canny~Lorg.opencv.core.Mat;~Lorg.opencv.core.Mat;~D~D%E2%98%82Mat"><span style="color: black;">Mat</span></a>
image, <a class="header" href="eclipse-javadoc:%E2%98%82=GLL/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~Canny~Lorg.opencv.core.Mat;~Lorg.opencv.core.Mat;~D~D%E2%98%82Mat"><span style="color: black;">Mat</span></a>
edges, double threshold1, double threshold2)<br />
<strong><br />
<table class="docutils field-list" frame="void" rules="none"><tbody valign="top">
<tr class="field-odd field"><th class="field-name"></th><td class="field-body"><ul class="first last simple">
<li><strong>image</strong> – 8ビット,シングルチャンネルの入力画像.</li>
<li><strong>edges</strong> – 出力されるエッジのマップ. <tt class="docutils literal"><span class="pre">image</span></tt> と同じサイズ,同じ型です.</li>
<li><strong>threshold1</strong> – ヒステリシスが存在する処理の,1番目の閾値.</li>
<li><strong>threshold2</strong> – ヒステリシスが存在する処理の,2番目の閾値.</li>
<li><strong>apertureSize</strong> – <tt class="xref py py-func docutils literal"><span class="pre">Sobel()</span></tt> オペレータのアパーチャサイズ.</li>
<li><strong>L2gradient</strong> – 画像勾配の強度を求めるために,より精度の高い <img alt="L_2" class="math" src="http://opencv.jp/opencv-2svn/cpp/_images/math/e13a902eb6a24cf493a2732badd0d151fb4f7672.png" /> ノルム <img alt="=\sqrt{(dI/dx)^2 + (dI/dy)^2}" class="math" src="http://opencv.jp/opencv-2svn/cpp/_images/math/21cf199f290de46245757d21ff3ce135f74901ce.png" /> を利用するか, <img alt="L_1" class="math" src="http://opencv.jp/opencv-2svn/cpp/_images/math/3f22b669e4803ae525cf8120ca251e2eab025872.png" /> ノルム <img alt="=|dI/dx|+|dI/dy|" class="math" src="http://opencv.jp/opencv-2svn/cpp/_images/math/db12388db2d790e5d77079fd979a2817c91bf7bf.png" /> で十分( <tt class="docutils literal"><span class="pre">L2gradient=false</span></tt> )かを指定します.</li>
<li></li>
</ul>
</td></tr>
</tbody></table>
</strong>
<br />
を用いることでできます。(OpenCV リファレンス参照)<br />
<br />
srcにはシングルチャンネルである必要があるので<br />
<br />
上の関数に入れる前に入力画像を<br />
<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=GLL/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc"><span style="color: black;">Imgproc</span></a>.cvtColor(<a class="header" href="eclipse-javadoc:%E2%98%82=GLL/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~cvtColor~Lorg.opencv.core.Mat;~Lorg.opencv.core.Mat;~I%E2%98%82Mat"><span style="color: black;">Mat</span></a>
src, <a class="header" href="eclipse-javadoc:%E2%98%82=GLL/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~cvtColor~Lorg.opencv.core.Mat;~Lorg.opencv.core.Mat;~I%E2%98%82Mat"><span style="color: black;">Mat</span></a>
dst, int code)<br />
<br />
codeにImgproc.COLOR_RGB2GRAYを指定することによってRGBからグレースケールのシングルチャンネルの画像に変換されます。<br />
<br />
/*-----------------------------------------------------------------------<br />
<br />
Mat src;<br />
Mat dst;<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=GLL/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc"><span style="color: black;">Imgproc</span></a>.cvtColor(src, dst, Imgproc.COLOR_RGB2GRAY);<br />
<br />
Mat image = dst;<br />
Mat edges;<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=GLL/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc"><span style="color: black;">Imgproc</span></a>.Canny( image, edges, 80, 100);<br />
<br />
-----------------------------------------------------------------------*/<br />
<br />
これで輪郭が抽出された画像が出力されます。たんすhttp://www.blogger.com/profile/00632511548189625745noreply@blogger.com0tag:blogger.com,1999:blog-5902304788409862795.post-17992322983432574702014-01-17T23:47:00.001+09:002014-01-20T19:12:16.096+09:00Android-OpenCV 肌色抽出(2)<h2>
Android-OpenCV 肌色抽出(2)</h2>
前回の記事 Android-OpenCV 肌色抽出で肌色の部分だけが白色の画像が出力されましたがこれだけではおもしろくないので今回は肌色の部分だけが色が残っている画像を出力します。<br />
<br />
<br />
/*--------------------------------------------------------------------<br />
<br />
Mat src;//入力画像<br />
Mat dst;//出力画像<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc">Imgproc</a>.cvtColor(src, dst, Imgproc.COLOR_RGB2HSV);<br />
<br />
Mat src2 = dst;//入力画像<br />
Mat dst2;//出力画像<br />
Scalar lowerb = new Scalar( 0,60,80);//下限値<br />
Scalar lowerb = new Scalar(30,255,255);//上限値<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.core(Core.class%E2%98%83Core">Core</a>.inRange( src2, lowerb, upperb, dst2);<br />
<br />
---------------------------------------------------------------------*/<br />
<br />
ここまでで肌色の部分だけ値を持った画像になります。<br />
<br />
次に色のついている入力画像と肌色の抽出した画像とを比べて値があるところだけ色を残したいと思います。<br />
<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.core(Core.class%E2%98%83Core"><span style="color: black;">Core</span></a>.bitwise_and(<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.core(Core.class%E2%98%83Core~bitwise_and~Lorg.opencv.core.Mat;~Lorg.opencv.core.Mat;~Lorg.opencv.core.Mat;%E2%98%82Mat"><span style="color: black;">Mat</span></a>
src1, <a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.core(Core.class%E2%98%83Core~bitwise_and~Lorg.opencv.core.Mat;~Lorg.opencv.core.Mat;~Lorg.opencv.core.Mat;%E2%98%82Mat"><span style="color: black;">Mat</span></a>
src2, <a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.core(Core.class%E2%98%83Core~bitwise_and~Lorg.opencv.core.Mat;~Lorg.opencv.core.Mat;~Lorg.opencv.core.Mat;%E2%98%82Mat"><span style="color: black;">Mat</span></a>
dst)<br />
<br />
src1-入力画像1<br />
src2-入力画像2<br />
dst-出力画像<br />
<br />
今回はsrc1に元の画像、src2に肌色を抽出した画像をいれます。<br />
<br />
出力画像は肌色の部分だけ色が残りそれ以外はなにも値がない画像になります。<br />
<br />
<br />
/*--------------------------------------------------------------------<br />
<br />
Mat src;//入力画像<br />
Mat dst;//出力画像<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc">Imgproc</a>.cvtColor(src, dst, Imgproc.COLOR_RGB2HSV);<br />
<br />
Mat src2 = dst;//入力画像<br />
Mat dst2;//出力画像<br />
Scalar lowerb = new Scalar( 0,60,80);//下限値<br />
Scalar lowerb = new Scalar(30,255,255);//上限値<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.core(Core.class%E2%98%83Core">Core</a>.inRange( src2, lowerb, upperb, dst2);<br />
<br />
Mat src3 = dst2;<br />
Mat dst3;<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.core(Core.class%E2%98%83Core"><span style="color: black;">Core</span></a>.bitwise_and( src, src3, dst3);<br />
<br />
---------------------------------------------------------------------*/たんすhttp://www.blogger.com/profile/00632511548189625745noreply@blogger.com0tag:blogger.com,1999:blog-5902304788409862795.post-17922237089090709832014-01-17T23:08:00.000+09:002014-01-20T19:14:00.941+09:00Android OpenCV カメラビュー<h2>
Android アプリ開発 OpenCV カメラビュー</h2>
OpenCV を用いたカメラビューのサンプルコード<br />
<br />
Android for OpenCVを使ってカメラビューおよびビューをMatで取り込む方法<br />
取り込んだ画像からいろいろな変換などができます。<br />
<br />
/*-------------------------------------------------------------------------------------------------------------------<br />
<br />
public class MainActivity extends Activity implements CvCameraViewListener{<br />
private CameraBridgeViewBase mCameraView;<br />
private Mat mOutputFrame;<br />
<br />
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {<br />
@Override<br />
public void onManagerConnected(int status) {<br />
switch (status) {<br />
case LoaderCallbackInterface.SUCCESS:<br />
mCameraView.enableView();<br />
break;<br />
default:<br />
super.onManagerConnected(status);<br />
break;<br />
}<br />
}<br />
};<br />
<br />
@Override<br />
protected void onCreate(Bundle savedInstanceState) {<br />
super.onCreate(savedInstanceState);<br />
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);<br />
requestWindowFeature(Window.FEATURE_NO_TITLE);<br />
setContentView(R.layout.activity_main);<br />
mCameraView = (CameraBridgeViewBase)findViewById(R.id.camera_view);<br />
mCameraView.setCvCameraViewListener(this);<br />
}<br />
<br />
@Override<br />
public void onResume() {<br />
super.onResume();<br />
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_6, this, mLoaderCallback);<br />
}<br />
<br />
@Override<br />
public void onPause() {<br />
super.onPause();<br />
if (mCameraView != null) {<br />
mCameraView.disableView();<br />
}<br />
}<br />
<br />
@Override<br />
public void onDestroy() {<br />
super.onDestroy();<br />
if (mCameraView != null) {<br />
mCameraView.disableView();<br />
}<br />
}<br />
<br />
@Override<br />
public void onCameraViewStarted(int width, int height) {<br />
mOutputFrame = new Mat(height, width, CvType.CV_8UC1);<br />
}<br />
<br />
@Override<br />
public void onCameraViewStopped() {<br />
if(mOutputFrame != null)mOutputFrame.release();<br />
mOutputFrame = null;<br />
}<br />
@Override<br />
public Mat onCameraFrame(Mat inputFrame) {<br />
//ここでビューから取り込んだ画像を取得できる<br />
return inputFrame;<br />
}<br />
}<br />
<br />
--------------------------------------------------------------------------------------*/<br />
<br />
activity_main.xml<br />
<br />
/*-----------------------------------------------------------------------------------<br />
<br />
<RelativeLayout xmlns:android=<a href="http://schemas.android.com/apk/res/android">http://schemas.android.com/apk/res/android</a><br />
xmlns:tools=<a href="http://schemas.android.com/tools">http://schemas.android.com/tools</a><br />
xmlns:opencv=<a href="http://schemas.android.com/apk/res-auto">http://schemas.android.com/apk/res-auto</a><br />
android:layout_width="match_parent"<br />
android:layout_height="match_parent"<br />
android:keepScreenOn="true"<br />
tools:context=".MainActivity" ><br />
<br />
<org.opencv.android.JavaCameraView<br />
android:id="@+id/camera_view"<br />
android:layout_width="fill_parent"<br />
android:layout_height="fill_parent"<br />
android:visibility="visible"<br />
opencv:camera_id="any"<br />
opencv:show_fps="true" /><br />
<br />
</RelativeLayout><br />
<br />
------------------------------------------------------------------------------------------*/たんすhttp://www.blogger.com/profile/00632511548189625745noreply@blogger.com0tag:blogger.com,1999:blog-5902304788409862795.post-71657851465115230862014-01-17T23:00:00.000+09:002014-01-19T11:41:51.779+09:00Android-OpenCV 肌色抽出<h2>
Android for OpenCV</h2>
<br />
Androidで取り込んだ画像から肌色を抽出する方法<br />
<br />
肌色を抽出するとき色空間がRGBの画像から肌色の範囲を選択してもできますが明るさによって値が大きく変わるのであまり適していません。そこで明るさなどの影響を減らすために色空間をRGBからHSVに変換します。<br />
<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc"><span style="color: black;">Imgproc</span></a>.cvtColor(<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~cvtColor~Lorg.opencv.core.Mat;~Lorg.opencv.core.Mat;~I%E2%98%82Mat"><span style="color: black;">Mat</span></a>
src, <a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc~cvtColor~Lorg.opencv.core.Mat;~Lorg.opencv.core.Mat;~I%E2%98%82Mat"><span style="color: black;">Mat</span></a>
dst, int code)//色空間の変換<br />
src-入力画像、dst-出力画像(入力画像と同じサイズ)、code-変換コード<br />
<br />
変換コードのところをRGBからHSVに変換するコードを指定します。<br />
<br />
Imgproc.COLOR_RGB2HSV(RGB→HSV)<br />
<br />
/*--------------------------------------------------------------------<br />
<br />
Mat src;//入力画像<br />
Mat dst;//出力画像<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.imgproc(Imgproc.class%E2%98%83Imgproc"><span style="color: black;">Imgproc</span></a>.cvtColor(src, dst, Imgproc.COLOR_RGB2HSV);<br />
<br />
---------------------------------------------------------------------*/<br />
<br />
これで画像の色空間がHSVに変わりました。<br />
<br />
次に肌色の範囲を指定します。<br />
<br />
H-色相、S-彩度、V-明度<br />
<br />
だいたいHが0~30、Sが60~255、Vが80~255の間の値で肌色になります。<br />
この値を変えることによって肌色を抽出する精度が上がりますが今回はこの値にします。<br />
<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.core(Core.class%E2%98%83Core"><span style="color: black;">Core</span></a>.inRange(<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.core(Core.class%E2%98%83Core~inRange~Lorg.opencv.core.Mat;~Lorg.opencv.core.Scalar;~Lorg.opencv.core.Scalar;~Lorg.opencv.core.Mat;%E2%98%82Mat"><span style="color: black;">Mat</span></a>
src, <a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.core(Core.class%E2%98%83Core~inRange~Lorg.opencv.core.Mat;~Lorg.opencv.core.Scalar;~Lorg.opencv.core.Scalar;~Lorg.opencv.core.Mat;%E2%98%82Scalar"><span style="color: black;">Scalar</span></a>
lowerb, <a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.core(Core.class%E2%98%83Core~inRange~Lorg.opencv.core.Mat;~Lorg.opencv.core.Scalar;~Lorg.opencv.core.Scalar;~Lorg.opencv.core.Mat;%E2%98%82Scalar"><span style="color: black;">Scalar</span></a>
upperb, <a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.core(Core.class%E2%98%83Core~inRange~Lorg.opencv.core.Mat;~Lorg.opencv.core.Scalar;~Lorg.opencv.core.Scalar;~Lorg.opencv.core.Mat;%E2%98%82Mat"><span style="color: black;">Mat</span></a>
dst)<br />src-入力画像、lowerb-範囲の下限値、upperb-範囲の上限値、dst-出力画像<br />
<br />
今回の場合ScalarはScalar(H、S、V);の順番で指定します。<br />
<br />
/*--------------------------------------------------------------------<br />
<br />
Mat src;//入力画像<br />
Mat dst;//出力画像<br />
Scalar lowerb = new Scalar( 0,60,80);//下限値<br />
Scalar lowerb = new Scalar(30,255,255);//上限値<br />
<a class="header" href="eclipse-javadoc:%E2%98%82=OpenCVnew/C:%5C/Program%20Files%20%5C(x86)%5C/eclipse%5C/OpenCV-2.4.6-android-sdk%5C/sdk%5C/java%5C/bin%5C/opencv%20library%20-%202.4.6.jar%3Corg.opencv.core(Core.class%E2%98%83Core"><span style="color: black;">Core</span></a>.inRange( src, lowerb, upperb, dst);<br />
<br />
---------------------------------------------------------------------*/<br />
<br />
これで肌色の部分だけが抽出された画像が出力されます。<br />
たんすhttp://www.blogger.com/profile/00632511548189625745noreply@blogger.com0tag:blogger.com,1999:blog-5902304788409862795.post-39152667250944835582014-01-13T12:51:00.000+09:002014-01-20T19:25:04.252+09:00Android Viewを重ねて表示<h2>
Android Viewを重ねて表示</h2>
<br />
AndroidでViewなどを重ねて表示する方法<br />
AvtivityのCreateでaddContentView(view,params)を使うことによって重ねて表示できます。<br />
カメラから取り込んだものの上に表示させることもできます。<br />
<br />
/*------------------------------------------
<br />
<br />
@Override
<br />
<span style="color: #990099;"> protected void</span> onCreate(Bundle bundle) {
<br />
super.onCreate(bundle);
<br />
MyView myView = new MyView(this);<span style="color: #009966;">//独自のViewクラス</span>
<br />
<br />
<span style="color: #009966;">//ここをカメラビューにすることで背面がカメラから取り込んだものになる</span>
<br />
setContentView(R.layout.activity_main);
<br />
<br />
<span style="color: #009966;">//ここに重ねて表示したいものを指定する</span>
<br />
<span style="color: red;">addContentView</span>(myView, new LayoutParams(
<br />
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT) );
<br />
}
<br />
---------------------------------------------*/
<br />
<br />
これでactivityのレイアウトとViewを重ねて表示することができます。<br />
<br />
レイアウトをカメラビューなどに変えて表示させるの一番有効的な使い方ですが、ボタンなどの配置をレイアウトに入れてView上にそのレイアウトを表示させる方法もあります。たんすhttp://www.blogger.com/profile/00632511548189625745noreply@blogger.com0tag:blogger.com,1999:blog-5902304788409862795.post-81072157965944554662014-01-13T12:49:00.000+09:002014-01-20T19:38:09.162+09:00Android カメラビュー<h2>
Android カメラビュー</h2>
<br />
Androidカメラビューのサンプルコード<br />
<br />
カメラからの取り込んだものを画面に表示させます。画面をタッチして写真が撮れるようにするとカメラアプリが作れます。<br />
本体のカメラを使うには権限が必要なのでアプリのマニュフェストにカメラを使えるようにしておきます。<br />
<br />
/*------------------------------------------------------------------------------<br />
import android.app.Activity;<br />
import android.content.Context;<br />
import android.hardware.Camera;<br />
import android.os.Bundle;<br />
import android.view.Menu;<br />
import android.view.SurfaceHolder;<br />
import android.view.SurfaceView;<br />
public class MainActivity extends Activity {<br />
<br />
@Override<br />
protected void onCreate(Bundle savedInstanceState) {<br />
super.onCreate(savedInstanceState);<br />
setContentView(new MyCameraView(this));<br />
}<br />
<br />
public class MyCameraView extends SurfaceView implements SurfaceHolder.Callback{<br />
private Camera camera;<br />
<br />
public MyCameraView(Context context){<br />
super(context);<br />
getHolder().addCallback(this);<br />
getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);<br />
}<br />
<br />
public void surfaceCreated(SurfaceHolder holder){<br />
camera = Camera.open();<br />
try {<br />
camera.setPreviewDisplay(holder);<br />
} catch (Exception e) {<br />
e.printStackTrace();<br />
}<br />
}<br />
<br />
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height){<br />
Camera.Parameters parameters = camera.getParameters();<br />
parameters.setPreviewSize(width, height);<br />
camera.setParameters(parameters);<br />
camera.startPreview();<br />
}<br />
<br />
public void surfaceDestroyed(SurfaceHolder holder){<br />
camera.release();<br />
camera = null;<br />
}<br />
<br />
}<br />
<br />
}<br />
<br />
-------------------------------------------------------------------------------------------------*/<br />
<br />
カメラの利用には以下の文をマニュフェストに追加します。<br />
<pre><uses-permission android:name="android.permission.CAMERA" /></pre>
たんすhttp://www.blogger.com/profile/00632511548189625745noreply@blogger.com0