【cpp】c++でコンソール文字化け UTF8とShiftJIS

cout << "あいうえお" << endl;

コンソール

a4sdytuygcid(文字化け)

ぶち●す!!!!!

問題点とその理由

プログラムの文字コードUTF-8に対して、 windowsのコンソールの出力はShift-JISらしい。

消えろ!Shift-JIS!!!!

解決点とその結果

じゃあコンソールの出力をプログラムでセットしてから coutしましょうね。

解決したプログラム

 // Set the code page of the output console to UTF-8
    ::SetConsoleOutputCP(65001u);

解決した結果

できたー!!!うれぴー!!

【python】アルファ値をもつ画像から透明属性を除いて処理できるようにした【opencv】

透過画像にputtextするとバグる!!!!

色がおかしい、変な色になる、なんでじゃ!!

4チャンネルの確認

透明な画像の情報を持っている画像は色情報で4つの情報を持っている

ようするにピクセル

位置x座標、y座標の2つと色情報のBlue,Green,Red,Alphaと4つの情報がある

たとえば切り抜きがひどいが透過画像のつぎのねこ

f:id:majimanjipien:20210315193523p:plain

これの形はshapeでわかるので出力してみる

img = cv2.imread("./test.png",-1)
print(img.shape)

とすれば

(336, 378, 4)

となってたしかに4チャンネルになっている。

問題点とその結果

問題のプログラム

cv2.puttextを実行しようとした。

import cv2
img = cv2.imread("./test.png",-1)
h,w = img.shape[0],img.shape[1]#文字の配置場所決めのため、とくに今回不要だけどまあかいてみた
cv2.putText(img, 'A', (int(w/2), int(h/2)), cv2.FONT_HERSHEY_PLAIN, 4, (0, 0, 255), 5, cv2.LINE_AA)#赤文字
cv2.imwrite('result.png', img)

問題の結果

result.png

f:id:majimanjipien:20210315200450p:plain

何故か挙動がおかしい、(0, 0, 255) で赤を指定しているのに色がおかしいとか

解決点とその結果

opencvのリファレンスを見よう

描画関数 — opencv 2.2 documentation

ここをみると

これらの関数は,アルファ透過をサポートしません.目的画像が4チャンネルである場合でも color[3] には,単なるピクセル値がコピーされるだけです.したがって,もし半透明な形状を描画したい場合は,それを別のバッファに描画してから画像とブレンドするとよいでしょう.

まじか!

解決したプログラム

import cv2
import copy

img = cv2.imread("./test.png",-1)
img_3channel = copy.deepcopy(img[:,:,:3]) #3チャンネル分の抜き出し
h,w = img.shape[0],img.shape[1]#文字の配置場所決めのため、とくに今回不要
cv2.putText(img_3channel, 'A', (int(w/2), int(h/2)), cv2.FONT_HERSHEY_PLAIN, 4, (0, 0, 255), 5, cv2.LINE_AA)
img[:,:,:3] = img_3channel[:,:,:3]#アルファ値以外を加工画像から戻す
cv2.imwrite('result.png', img)

解決した結果

4チャンネルの画像をかこうしてかつ透過情報ももったimgができあがりました

result.png

f:id:majimanjipien:20210315200304p:plain

アルファ値を削ることなく opencvのputtext関数を用いたい場合は3チャンネルにもどしてからやるとよかったりした

ベースの指おくやつをお金をかけずにとりつけた

指おくやつは

フィンガーレスト

っていうんだって。

フィンガーレストをつける

買ったもの

これ買った。 SCUD フィンガーレスト F-REST ねじもついてるしいいかんじ

f:id:majimanjipien:20210213161814j:plain

本体の穴あけ

位置決め

f:id:majimanjipien:20210213162309j:plain

ドライバーで穴を軽くあける

f:id:majimanjipien:20210213162347j:plain

ピックガードの穴あけ

ピックガードにも同じ位置で穴をあけたいけれど、 位置決めどうしようとなった結果、コピー用紙を使うことにした

f:id:majimanjipien:20210213162459j:plain

ねじを貫通させて固定

f:id:majimanjipien:20210213162506j:plain

3か所くらいこれをするとがしっと決まる

f:id:majimanjipien:20210213162542j:plain

外枠を書いて、これに合わせるという目安を作る

f:id:majimanjipien:20210213162742j:plain

位置合わせ

f:id:majimanjipien:20210213162820j:plain

ドライバーで穴をあける

f:id:majimanjipien:20210213162836j:plain

開いた

f:id:majimanjipien:20210213162854j:plain

きちんと貫通している

f:id:majimanjipien:20210213162959j:plain

完成

f:id:majimanjipien:20210213163025j:plain

わーい!

【C#】chromedriverのコンソール画面とブラウザ画面を消し去る

ほんとうに邪魔、黒い画面

f:id:majimanjipien:20210213014636j:plain

//オプションを準備
ChromeOptions options = new ChromeOptions();
//ヘッドレス追加、これでブラウザが消える
options.AddArgument("--headless");
//これはchrome.exeのある場所をさす。たぶんデフォルトはここだけど基本的に不要
//options.BinaryLocation = @"C:\Program Files\Google\Chrome\Application\chrome.exe";
//黒い画面を消すためにサービスを準備
var driverService = ChromeDriverService.CreateDefaultService();
//これで黒い画面を消す
driverService.HideCommandPromptWindow = true;
//driverを作るときにかっこに設定をぶちこむ
driver = new ChromeDriver(driverService,options);

これで消える 最高に気持ちいい