えたこと、その他を雑記するためのブログです。Note)がリニューアルしてほぼ新アプリなにかって言うと、かなりリニューアルしたし、実質新しく作り直したようなので、markdownエディタとしての今までの評価を見て、これからダウンロードする人は気をつけて。旧版もダウンロードできるよ。公式サイトから素直にダウンロードできるのはリニューアル版のみになってたhttps://boostnote.io/ここから目ぼしいダウンロードボタンを押しても、リニューアル版しかダウンロードできない。最近旧版を使い慣れてきていいな...と思った自分は若干裏切られた感じがしなくはない。旧版のリンクもあるまあその、ページ下にちゃんと旧版ダウンロードリンクがあるので。そもそもgitHubのリリースページにいけばありますね。github.com(ただのダウンロードリンクならしれっと取り下げられちゃうかと思ったけどgitHub上ならまず消えないでしょう)boostnoteの評価が指してるのは今のところこの旧版でしょう。時間が経てばリニューアル版の評価が出るでしょうけど。Noteとしたようなので、これで新版旧版呼び分ける感じがする。リニューアル版でよくなったところと言っても、リニューアル版使ったわけじゃないんですがリニューアル版でクラウド・スマホ対応したようなので、これは結構機能として大きいんじゃないかなと。自分のようにローカルにメモ帳的に使えればいいや、的な方が少数派かな?まとめリニューアル版はあんまりこなれてない感じがするので、アーリーアダプターさんたちによってもうちょっと磨かれるまで旧版使おうかなというただのものぐさ!でも旧版を今の所かなり気に入ってるので、リニューアル版がいい感じになったらぜひつかいたい。なんだかんだクラウドなら安心だし。おまけ旧版でhtml出力する時、デフォルトだとダークテーマ的なcssはついてこない(うまく反映されてない?)けどうまくいく方法を見つけたのでプルリクでも...と思ったらなんか新版が出ちゃったので結局ワークアラウンドをここに雑書きする大変非社会還元的なことになりそう。originのurlにユーザー名とパスワードを入れた。https://Hoge:Password@github.com/Hoge/repo.gitら、push成功。https://Hoge@github.com/Hoge/repo.gitでパスワード部分は削除でもこれでもpushうまくいったので、一回認証通すのが必要だった?できたにはできたけどあまりスッキリ解決せず。検索したら他の人が5億回くらい同じ問題に当たってたけど、「パスワードもurlに入れました^^」で終わってるところが多かったので一応あとから削除してもOKよってのを書いときます。pushであらためてユーザーIDとパスワードを聞かれる...はず。詳細メイン機で作成して色々やってgitHubにpushしたリポジトリを、サブ機でcloneしてから編集してcommitしてpushしようとした。403実はHogeとFuga2つのgitHubアカウントを持ってる。configの--globalも--localもついでに--systemも見たけどFugaの情報はない。originのurlにユーザー名も入れてhttps://Hoge@github.com/Hoge/repo.gitに。originのurlに入れてしまえばいいのかもしれないけどFugaの情報をどこから持ってきてるのか謎...でも結局冒頭のようにパスワードをurlに入れて解決。パスワード入れておくのはイヤなのであとから削除。削除したあともpushできたので一回認証通ればOKっぽい。追記ごめんこれ多分Windowsの資格情報マネージャーのせいでは。gitがcredential.helperとしてリモートリポジトリの認証情報を記憶管理するオプションが色々あるけどWindowsの場合wincredという設定があって、これが資格情報マネージャーを使うらしい。上の資格情報マネージャーの画面で、github.comに対する情報を消してあげればgitでpushする最初のときにユーザー名とパスワードを聞かれるはず。以降は記憶されるのでパスワード入力しなくて済む。結果として同じように解決するなら、やっぱり↑のように一回ユーザーIDとパスワード入れてpushしてからURL変えるほうがラクかも。サブ機も前に色々開発で使ってたので、多分Fugaアカウントの情報が残っててそっちを見に行ってたっぽい。なんでgitがFugaの情報を吐くのか(知ってるのか)怖かったけど出どころがわかって安心。PySide2前の記事ではwxPythonが~PyQtが~って言ってたんですが結局PySide2やってます。(0xC000041D)でエラーになりました。結論から言うと、QPixmapを作るときにcopyするとOKでした。QPixmap.fromImage(qtimg)こう。#★copyここの回答ほぼまんまで解決しましたが、エラー内容は違うかな...?stackoverflow.com下で書きますが、QGraphicsViewあたりもいじってたので原因特定がちょっと大変でした...具体例(半分雑記)PillowのImageGrabでスクリーンショットを撮ってPySide2のQGraphicsViewに表示させよう~としたらハマりました。再現できるコードはコチラ。sys.exit(app.exec_())ウィンドウにQGraphicsViewが貼ってあって、そこに起動時にImageGrabで撮ったスクショを貼るだけのコードです。問題の箇所は★ココ!の部分で、ImageGrabで取得したスクショ画像をQPixmapにするところですね。ちなみにImageGrabではなく、Image.openで画像ファイルを開いたものを渡したときはQPixmapをcopyしなくても動作していました。StackOverflowの回答にあるように、特定状況でリソースが解放されてしまう感じなんでしょうか。PySide2楽しいです。(0xC000041D)エラーTweet広告を非表示にするもっと読むコメントを書く2018-01-08wxPythonで画像が切れたり余分に表示されてしまうときの対処PythonでGUI書きたいよね、と思ってwxPythonやってます。QtはC++で書いたことあるし、PyQtのほうが良いんじゃ...と思いつつ。書きやすく分かりやすくはないので人にオススメするかと思うとうーん定数でレイアウト指定とかして、Pythonっぽくない...でもまあ頑張ればそれなりに書けるので簡単なツールを手元で作ってます。́;ω;`)原因は、画像データを更新した後に画面のRefreshメソッドを呼んでいなかったことでした。実際使うものを作ったときには画像が欠けてたりもして結構解決に時間をとりましたが、分かってみるとそりゃそうか、という感じです...抜き出しでわかりづらいですがGUI上の画像変更のコードを以下のようにするとうまくいきます。self.Refresh()実際作ってるものはメインのwx.Frame継承クラスの子にさらにwx.Panelが何重かネストしてその中に画像があったりするんですが、一番上のself.Refreshだけでちゃんとなるのであまりコントロール間の事は考えずself.Refreshが楽そうです(wx.Window継承クラスならRefresh呼べるので一部Panelだけ更新ももちろんできるはず)wxPythonで画像が欠けたり変な表示になってたらself.Refresh()!ということで同じところで詰まる人がいませんよーにと祈ります。github.com動くやつ↓https://github.com/saji-spoon/OpenCV-Siv3DSample/releases/tag/1.00以下、問題設定とかSiv3Dと合わせた表示結果とかについて説明するのでOpenCVの画像処理そのものの深いところの説明はあまりしません。アンケート用紙の枠検出(Form-Siv3D(August2016v2)プロジェクト)こんな感じ↓のアンケート用紙からOpenCVで入力枠を検出したい個人的にはこの記事↓めっちゃ参考になった...画像から四角いものを検出する、ってときにだいたい必要なものが解説されてる気がするdev.classmethod.jp画像から四角いものを検出するには結構色々手順がいるけども、とりあえず「輪郭検出」→「ゴミ取り」(一定以下の面積の輪郭を取り除く)というところを考えると、「一定以下」ってどれくらいの数値ならいいのかがよくわからない。いうことで、スライダーで値を調整しながら、指定された値より面積が大きい輪郭しか表示しないようにSiv3Dで表示させてみた。デフォルトだとこの状態で、アンケート用紙に書かれた文字まで輪郭検出してしまっている。スライダーを少し右に動かすと、文字から検出した輪郭は表示されなくなる。5000を超えたあたりで一番小さい入力欄も表示されなくなってしまうこともわかる。ゴミ取っただけだとタイトルとかも入ってしまっているけど、ここから切り出したい画像だけクリックで指定...とかも割と簡単に発展できそう。アンケート用紙のスキュー補正(SkewCorrect-Siv3D(August2016v2)プロジェクト)またアンケート用紙。白紙のと、記入済みだけど曲がってしまっているのがある。スキャナで取るとき下手くそだと曲がりますね。アンケート用紙には一番外側にふっとい枠線がある。これを検出して曲がっているのを補正できる...はず。スキャンしたときとか曲がってしまったり歪んでしまったりして結果画像がズレてるのをスキューと言います。これを直すのでスキュー補正。これの補正枠を基準として、これに合わせて直す。曲がってしまってる記入済みの画像。補正枠は検出できてるので、これを白紙画像の補正枠と合わせるように変形すればいい。輪郭検出と直線近似で補正枠の四角形はとれた上で、cv::getPerspectiveTransformcv::warpPerspectiveの2つの関数を使うと、一方を基準として、もう一方をそこにあわせる、みたいな画像の変形ができる(ふんわり)。正確にはcv::getPerspectiveTransformで、4点から4点への変換行列を作り、cv::warpPerspectiveで作った行列を用いて実際に画像変形を行う。今回は単純に歪んでる方の補正枠を正しい補正枠に合わせるように変形しているだけといえばそれだけ。Siv3D単体でも結構な加工とか画像処理(輪郭検出すら)できるのでOpenCVだけでできるのはなんじゃろなーと考えてたけど、自分の知ってる範囲ではcv::warpPerspectiveかな...と。予想以上にきれいに補正できて(画像がもともときれいなのはあるけど)びっくり。真っ直ぐにした画像を予め用意してるとかそういうわけではないぞ!まとめやっぱり値を調整しつつリアルタイムで見れるのとか、座標クリックとかで操作しつつ次の処理を決めたりとかするにはSiv3Dの機能が強力。簡単な操作で大量の画像の切り出しとか加工を自動化できると色々役に立つかも。最近OpenCV(C++)で色々と画像処理をしてるけども、デフォルトのウィンドウとかキー入力受付が結構使うのが辛く、せっかくなので表示とか操作インターフェースを使い慣れたSiv3Dでやりたい。Siv3Dの画像クラスであるs3d::Imageと、OpenCVの画像クラスであるcv::Matの変換ができれば、OpenCVで加工した画像をSiv3Dで表示する、ってことが普通にできそう。先駆者さんもいるもので、このコードを参考にちょいちょいしてみたらできた。Siv3D+OpenCV環境ちょろっと環境構築の話もしておく。OpenCV(3.0.0)のインストールは済ませておく。作るプロジェクトはSiv3Dプロジェクト。そのプロジェクトに、OpenCV3.0.0のincludeディレクトリを「追加のインクルードディレクトリ」として設定。追加のライブラリディレクトリなどの設定はいらず、Siv3D側で導入済みのOpenCVのライブラリを参照して動く。簡単だけどcv::imreadやcv::imshowが通常通り動かない点など、通常の導入とちょっと違う点も出てくる。cv::imreadはbmpしか読み込まないので、基本的に画像読み込みはs3d::Imageから行ったほうがいいと思う。他、cv::imshow等ウィンドウ系関数が使えない。cv::Mat::copyTo~とかって怒られる場合は、OpenCV3.0.0以外のバージョンのincludeディレクトリが指定されているかも。2017年12月現在の最新はOpenCV3.3.1なので、インストールもディレクトリの指定も間違わないように注意。画像の変換ということでcv::Mat←→s3d::Image。cv::imreadでファイル読込→s3d::Imageに変換して加工→s3d::Imageを出力をする。最後のループで両方の結果を表示。下記コードを動かす前に、Siv3DデフォルトでExampleディレクトリに入ってる「Windmill.png」をbmpに変換した「Windmill.bmp」を同じディレクトリに置いておいてください。ペイントとかで開いたのを保存しなおすとかでOKです。}}1.でcv::Matを加工した後、s3d::Imageへの変換処理をしなくていいの?ってなるけど、今回はなくて大丈夫。s3d::Image→cv::Matは「変換」と書いてるけど、s3d::Imageが持ってるデータをcv::Matが指すようになるだけなので。cv::Matを更新すると、s3d::Imageも更新されている。初めに読み込んだイメージから別のcv::Matをcloneなどで作った場合は、cv::Mat→s3d::Imageの処理を挟む必要がある。cv::Mat→s3d::Imageする際は、cv::Mat側がチャンネル数4で、画素がRGBAの並びでないといけない。上記のようにmemcpyを使うと、cv::Matがメモリ上で連続データでないといけない。(ROIなど、連続データでないこともある。BGR)他のcv::Matを加工したもの(チャンネル数等不明、不連続データの可能性あり)これらを適宜RGBAに変換などする必要がある。変換関数ここまで来て結構めんどくさいなーと思いました。cv::Mat→s3d::Imageするのに↑のような条件気にしたりとかはやってられない感。思考停止で変換できるんじゃないかなーという変換関数たちを作った↓github.com↑の条件を気にしないでcv::Mat→s3d::Imageに変換したいって場合はcvsiv::MatToImageForceを呼んで渡せばだいたい変換できる。(cv::MatがRGBかBGRかは判定できないので指定する必要アリ)↑の条件に合っていることがわかっていればcvsiv::MatToImageを呼んだほうがコピーが少ないので良い。cvsiv::IsConvertibleByMatToImage/IsConvertibleByMatToImageForceでそれぞれ適用可能かも判定できる。上の例のようにs3d::Imageを参照するcv::Matを作りたいときはcvsiv::GetMatLinkedToImage。データ共有してるとか嫌だからコピーしてcv::Mat作りたいときはcvsiv::ImageToMat。画像データは基本コピーしないほうがパフォーマンスいいと思うので...まとめcv::Matの表現できる画像データはs3d::Imageより多様なので、任意のcv::Matをs3d::Imageへ変換しようとするのは意外と色々あって大変だけどもう変換関数があるので解決(?)次はこれを使ってOpenCVで処理した画像をSiv3Dで見てみるようなものを作ってみたい。次はhota1024さんです。Notebookを使い始めた。Vim-bindingにしてみたり、jupyter-themesで画面をダーク系にしてみたりと楽しんでいる(?)ところが、このjupyter-themesのテーマ、不満な点が一つだけあった。以下のコマンドでダーク系のmonokaiテーマへ切り替える。-Tでファイル名やツールバー表示。