です
月: 2020年6月
Cube PDF UtilityでCドライブ容量が圧迫されていた話
こんにちは。
くろんです!
今回は趣味でやっている書籍電子化に関する話です。
漫画を電子化するときの手順として
カラーページとモノクロページのつなぎ合わせ作業があります。
その時に私は「Cube PDF Utility」というソフトを使用しています。
こちらのソフト、編集作業が直感的に行える&機能がシンプルなのでとても使いやすくおすすめです。
今回、TEMPファイルによってCドライブが圧迫されていた現象があったのでメモとして残しておきます。
TEMPファイルは以下のフォルダにありました。
C:\Users(ユーザー名)\AppData\Local\CubeSoft\CubePdfUtility2
こちらに作成日付フォルダを作り、その中にTEMPファイルがあります。
おそらく一定期間で消えるものですが、一度に作業をし過ぎると溜まりすぎてしまうので手作業で消すのが無難だと思います。
※ あくまでTEMPファイルと言っているのは推測ですので、削除は自己責任でお願いします。
では!
OpenCVで複数のテンプレートマッチングする方法
こんにちは。
くろんです!
今回はOpenCVを使って画像中から複数のテンプレートマッチングを行います。
今回はサンプル画像はこちら

かえるのうたの歌詞がのった画像を用意しました!!
こちらのサンプルから「ワ」を切り出した下のようなマッチング用画像を作りました、
サンプル画像から「ワ」をすべて抽出したいと思います。

#include <vector> #include "opencv2/opencv.hpp" int main() { cv::Mat src = cv::imread("カエルの歌.png"); cv::Mat key = cv::imread("カエルの歌KEY.png"); cv::Mat res; cv::matchTemplate(src, key, res, cv::TM_CCOEFF_NORMED); std::vector<cv::Point> locs; for (int y = 0; y < res.rows; y++) { for (int x = 0; x < res.cols; x++) { uchar* uctemp = &res.data[y * res.cols * 4 + x * 4]; float* ftemp = (float*)(uctemp); if (*ftemp > 0.95) { bool isExist = false; for (auto ml : locs) { // 今までに見つかった場所からある程度離れないと検出扱いにしない. int d = pow(y - ml.y, 2) + pow(x - ml.x, 2); if (d < 10) { isExist = true; } } if (!isExist) { locs.push_back(cv::Point(x, y)); } } } } for(auto l : locs) { cv::rectangle(src, cv::Rect(l.x, l.y, key.cols, key.rows), cv::Scalar(0, 0, 255)); } cv::imshow("result", src); cv::waitKey(); return 0; }
結果はこんな感じになります。

しっかり「ワ」の場所だけ抽出できているかと思います。
以上
では!
文字コード変更プログラム公開しました
こんにちは。
くろんです!!
で思いがけず文字コードについて勉強する機会が出来たので、
なんとなく文字コードを変換するプログラムを作りました。
https://github.com/ckron/TextEncodeChanger/
こちらです、対応文字コードは
SHIFT_JIS: 932 UTF16_LE: 1200 UTF16_BE: 1201 UTF32_LE: 12000 UTF32_BE: 12001 EUC_JP: 20932 UTF7: 65000 UTF8: 65001
です。
内容は単純な文字コードの変換をするだけのものですが、文字コード周りで困っている方がいたらもしかしたら役に立つかもしれません。
役に立たないかなぁー?役に立ったらいいなー
使い方はmain.cpp にサンプル載せているのでそこら辺参照でお願いします。
では
itunesのエクスポートしたお気に入り情報読み込んで失敗した話
こんにちは。
くろんです!!
にてはまったポイントがあったので記録がてら記事にしておきます。
結論から言うと、完璧に解決はできずに応急処置的な感じで終わっていますので参考程度でどうぞ。
はまったポイントを簡潔に言うと
UTF-16LE(itunesお気に入りエクスポート文字コード)が正しく読み込めない
こんな感じです。
とりあえずやってみたことと失敗した内容は↓↓↓
ファイルからの読み込み
- stlを使う方法(ifstream/wifstream) → データをそのまま読み込めているようだが、1文字がchar型2バイトで読み込まれ、適切に1文字単位で読み込めない
文字コードの変換
- WideCharToMultiByte/MultiByteToWideChar → 文字コードをUTF-16LEにしても変換がうまくいかない(printf()で表示させるとバグる) - std::wstring_convertを使う → C++17で非推奨 & 変換しても表示がバグる
ここら辺はダメだった印象ですね…
ちなみにやってみてうまくいったのは、_wfopen_s()
でした。
コードはこんな感じです。
setlocale(LC_CTYPE, ""); wchar_t wstr[512]; FILE* pfile = nullptr; _wfopen_s(&pfile, L"./PATH", L"rt,ccs=UTF-16LE"); if(pfile == NULL) { return false; } if(fgetws(wstr, 512, pfile) == NULL) { return; } fclose(pfile);
このコードだと一応、UTF-16LEのファイルを読み込めました!
setlocale()が効いているのかよくわかりませんが、setlocale()を外すとうまく読み込めないので大事なことなのかと。
詳しくはわからないので勉強しないとですね…
itunesからエクスポートしたお気に入り情報の読み込みで詰まったら、是非使ってみてください。
では!
GoogleHomeに自動でitunes曲をアップロードする別方法を考える(3)
こんにちは。
くろんです!
> の続きです。
久々ですね。
ここまでは必要項目のリストアップをしていました。
- itunesのプレイリスト情報を取得
- プレイリスト情報から曲の保存先情報を取得
- 曲を指定フォルダにコピーする
- wavをmp4に変換する
- Google Play Musicにアップロードする
- プレイリスト情報が変更されたときに1 ~ 5の処理をする
↑ の1 ~ 6ができれば自動化できるかな。と
このうち3 ~ 6 は楽にできそうだったのでざざっと考えているやり方書いて終わって、
1 ~ 2部分をいい感じにできる方法を考えます。
3. バッチ処理
4. ffmpegを使用し変換
5. 公式アプリケーションより自動的アップロード
6. バッチ処理
4 ~ 6はこんな感じですかね…
あとは1 ~ 2をどうするか
1 ~ 2の部分でやりたいことはitunesにある、任意のお気に入りにの曲情報を取得し、曲が保存されているパスを取得するということです。
色々探してみましたが、itunesのお気に入り情報が保存されている場所がどうしても探せなかったので、
とりあえず最初はお気に入りの情報をエクスポートし、そこからアップロードまでを自動化するようにしていきます。
名前 アーティスト 作曲者 アルバム グループ 作品 楽章番号 楽章数 楽章名 ジャンル サイズ 時間 ディスク番号 ディスク数 トラック番号 トラック数 年 変更日 追加日 ビットレート サンプルレート 音量調整 種類 イコライザ コメント 再生回数 最後に再生した日 スキップ回数 最後にスキップした日 マイ評価 場所
itunesのお気に入り情報は↑のようになってました。
1行目に各情報のタイトルが付いていて2行目以降はそれに対応する形でお気に入りに入っている曲情報が入っていました。
情報の区切りはタブを使っていました。
itunesのお気に入り情報で曲のパスは”場所”タイトルに入っているようなので、そこの箇所からパスを抜き出すようにします。
パスを抜き出すのは文字列操作すればいけるし、パスが抜き出せればあとはバッチファイルでもC++ならfilesystemでも使えばOKなのでとりあえずここまでで作れば出来上がりって感じですね!!
今回やっていた時に文字コード周りではまったポイントがあったので別記事にしておきます。
では