とある科学の備忘録

とある科学の備忘録

CやPythonのプログラミング、Arduino等を使った電子工作をメインに書いています。また、木製CNCやドローンの自作製作記も更新中です。たまに機械学習とかもやってます。

【C++】MinGW (g++)とCMakeでOpenCVとopencv-contributeをビルドする(Windows)

バージョン はじめに ビルド方法 HelloWorld HelloWorld実行 バージョン $ cmake --version cmake version 3.17.2 $ make -v GNU Make 3.81 $ mingw32-make -v GNU Make 4.2.1 $ g++ -v gcc version 8.1.0 はじめに タイトルの通りです。開発環境がVisual St…

【C++/MinGW】FreeTypeを使ってTTFファイルから文字レンダリング

FreeTypeとは? FreeTypeのインストール サンプルコード 実行結果 FreeTypeの使い方 初期化 太字or斜体に設定する レンダリング(方法1) レンダリング(方法2) FreeTypeとは? FreeTypeはフォントエンジンを実装したライブラリです。つまり、std::stringと…

【Python】無料でジオコーディング(住所→緯度経度etc.)

住所⇔緯度&経度の変換をしたい、目的地までのルート検索や所要時間を調べたい、と思い良いものがないかなぁと思っていました。 すると、↓の記事でGoogle Maps APIというものがあることを知り、 qiita.com使ってみよ~~、と思ったのですが、なんと有料でし…

【OpenCV/C++】画像の一部分を修復する(cv::inpaint)

今回すること OpenCVを用いて画像の一部を修復します。例えば、下の画像の様に、電線だけ消す、というようなことができます。(下の方は失敗していますが、一番上4本の電線はかなりきれいに消えていると思います) このような画像修復を行うために、cv::inpa…

【OpenCV/C++】GrabCutで対話的な前景抽出を行う(AEのロトブラシの画像版)

この記事では、 ↑画像を、 ↑こんな風にするエフェクトをC++で作っていきます。Rotoscoping、AEで言うところのRotobrush、日本語だと前景抽出とかセグメンテーションとかそういう類の技術です。 実装方法 細かいことを言うと、セグメンテーションのアルゴリズ…

【OpenCV/C++】OpenCVでトーンカーブっぽいものを実装する

タイトルの通りです。今回作ってみるのはこれです。 右側の画面の2つの黄色の円を動かすことで、画像の色調補正を行うことができるプログラムです。 右側の画面の白色の曲線が補正の値を表していて、横軸が入力値(RGBそれぞれ)、縦軸が出力値となります。 …

【Arduino&Pmod NAV】地磁気センサからヨー軸算出

前書き 加速度センサとジャイロセンサを使って姿勢角を算出するのは、以前に複数個の記事で行っています。 shizenkarasuzon.hatenablog.com shizenkarasuzon.hatenablog.com ですが、今回は地磁気センサを使って姿勢角(ヨー角のみ)を算出してみようと思い…

【お知らせ】 New Video!

AviUtlで個人的に動画編集を行ってきましたが、その完成作品の一部を紹介します~~。編集全部僕のやつと他の人との共同製作」のものがあります。 Adobe製品ほしい~~、けど高い~~。 - www.youtube.com 編集を担当しました。 www.youtube.com 同じく編集…

Pythonでイージングを試してみる

イージングとは イージング(Easing)は日本語では緩急を意味します。 うえの動画の様に動きに緩急をつけることで、より自然で滑らかに表現ができるようになります。 (イーズイン)ease in → 最初はゆっくり、最後は高速。 (イーズアウト)ease out → 最初…

【OpenCV/C++】画像に3DLUTをあてる(適応させる)プログラム!(立方体補正)

LUTとは 1DLUTと3DLUT LUTファイルの拡張子 LUTの格子点 立方体補間 プログラム(補間なし) 実行結果(補間なし) プログラム(補間あり) 実行結果(補間あり) LUTとは LUT(Lookup Table、ルックアップテーブル)とは、 複雑な計算処理を単純な配列の参照…

【動画編集】無料で動画編集を始めようという人へ➀ 必要なもの

これから動画編集を始めよう、という人に向けたアドバイスを書いていきます。私自身、まだ動画編集は初心者なので、間違ったことを書いていたらごめんなさいこの記事に書いてあるソフトウェア、素材はすべて無料で手に入るものです。有難いーー!! 必要な機…

【C++/OpenCV】OpenCVでピクセルソート!

ピクセルソートとは AfterEffectとかAviUtlの中の数あるエフェクトの中でも気に入っているのがPixelSortです。(AviUtlの場合はAodaruma様の外部スクリプトを導入する必要があります) (AviUtlでのPixelSortの例) その名の通り、画像の「ピクセル」を「ソ…

【C++/OpenGL】インスタンス化を用いてパーティクル出力

にゃんぱすー。お久しぶりです。期末テストが終わって夏休みに入ったのでブログを再開しようかなぁと考えているところです。 プログラム 実行結果 解説 インスタンス化 データ共有によるメモリ削減(glVertexAttribDivisor) パーティクルのシミュレーション…

【C++】UDP通信を実装する(Windows/Linux環境)

UDP通信について この記事ですること プログラム(送信側) プログラム(受信側) 実行結果 解説(送信側) 初期化 【補足】ポート番号について データ送信 タイムアウト時間設定 解説(受信側) 初期化 データ受信 recv関数 recvfrom関数 ノンブロッキング…

【C++】OpenGLで描画したものをOpenCVのMatに変換

すること サンプルプログラム 実行結果 解説 オフスクリーンレンダリング レンダリングしたデータを取得 すること shizenkarasuzon.hatenablog.com 少し前に、OpenGLを使って四角形を表示するプログラムを書きました。この記事ではOpenGLでレンダリングを行…

【C++/OpenCV】スクリーンキャプチャした映像を表示 or 動画ファイルとして保存

タイトルの通りです。 C++を使ってスクリーンキャプチャを行います。 プログラム1(キャプチャ映像表示) 実行結果1 プログラム2(キャプチャした映像をmp4で保存) 実行結果2 参考文献 ちなみに、Python版は↓です。 shizenkarasuzon.hatenablog.com ではま…

【M5Stack】第8回 シリアル通信 全集

PCとM5StackをUSBで接続して、シリアル通信を行ってみます サンプルプログラム 実行方法 実行結果 解説 シリアル通信について 初期化 送信(M5Stack→PC) 文字列送信 数値送信(n進数) 数値送信(桁数指定) uint8_t型のデータを1バイト送信 uint8_t型のデ…

【C++/OpenGL】NO.8 ASCII文字をテクスチャを使って描画

前回の記事で、配列からテクスチャを生成し(≧▽≦)マークを描画する、という事をしました。 shizenkarasuzon.hatenablog.com 今回は、これを使って文字列を描画してみます。 準備(配列作成) サンプルプログラム 実行結果 解説 準備(配列作成) 文字をテクス…

【C++】Tips集

変数名とその値を標準出力 ベクトルたち std::vector自作 WinMainのプログラムでもコンソール出力を可能にする 関数マクロ スピーカーの音量変更 マイクの入力レベル変更 変数名とその値を標準出力 define disp(A) (std::cout << #A << " = " << A << "\n") …

【C++/OpenGL】NO.7 OpenCVのcv::MatをOpenGLのテクスチャに変換する

内容 結論 サンプルプログラム 実行結果 内容 タイトルの通りです。 OpenCV(画像処理ライブラリ)のcv::Mat型の画像データをOpenGLのテクスチャに変換します。 結論 cv::Mat型において、実際の画像データが格納されている場所は、img.ptr()で知ることができ…

【C++/OpenGL】NO.5 透明度付きテクスチャの表示(GLbyte配列から生成)

この記事の内容 プログラム 実行結果 解説 アルファテクスチャを描画する時の設定 この記事の内容 前回の記事では、画像ファイル(rawファイル)を読み込んでテクスチャとして表示してみました。前回の記事↓ shizenkarasuzon.hatenablog.com 今回は、raw画像…

【M5Stack】第7回 WiFiを使ってPC→M5Stackにデータ送信

今度は、前回の記事の逆に、PCからM5Stackへデータを送ってみます。 プログラム(M5Stack) プログラム(PC側、C++) プログラム(PC側、Python) 実行結果 解説 プログラム(M5Stack) #include <WiFi.h> #include <WiFiUDP.h> #include <M5Stack.h> // arp -aでIPアドレスをすべて取得 //</m5stack.h></wifiudp.h></wifi.h>…

【M5Stack】第6回 WiFiを使ってM5Stack→PCにデータ送信

すること プログラム(M5Stack) プログラム(PC側、C++) プログラム(PC側、Python) 準備 自身のPCのIPアドレスを知る M5StackのIPアドレスを知る 実行結果 解説 WiFiに接続 UDP通信の設定 データ送信 すること タイトルの通りです。M5StackはWiFiモジュ…

【C++/OpenGL】NO.6 Win32 APIを利用して文字の表示(日本語OK!)

前書き プログラム 実行結果 解説 参考文献 前書き freeglutを使って文字の表示をすることもできますが、freeglutを使うには勿論freeGLUTを#includeする必要が出てきます。ですが、そうすると、同時にGLFWをインクルードできないので、メインループやイベン…

【C++/OpenGL】NO.5 テクスチャの表示(RAWファイルから)

プログラム .rawファイル作成 実行結果 以下、解説 UV座標について 全体的な流れ テクスチャの有効化 テクスチャの生成 テクスチャの作成 テクスチャに画像を割り当てる ラッピング フィルタ 画像を拡大するときに使えるフィルタ 画像を縮小するときに使える…

【C++/OpenGL】NO.4 行列を使って、図形を移動・回転させ、ピクセル座標→同軸座標の変換も行う!

タイトルが長ぇよ はじめに プログラム1(回転) 実行結果 解説 行列の考え方 そのまま 拡大縮小 移動 反転 回転 座標変換(左上原点ピクセル座標→中央原点同軸座標) プログラム2(ピクセル座標→同軸座標) 実行結果 はじめに 行列を使うことで、図形を回転…

【C++ Win32】キーボ―ド入力のすべて

サンプルプログラム 実行結果 解説 WndProc()を使って処理する方法 WM_CHARとWM_KEYUP(WM_KEYDOWN)の違い WM_CHARメッセージ WM_KEYDOWN(UP)メッセージ 特定のキーが押されたかをチェック サンプルプログラム #include <windows.h> LRESULT CALLBACK WndProc(HWND, </windows.h>…

【C++/Win32 API】ステータスバーの作成

サンプルプログラム 実行結果 ステータスバーを作成 ステータスバーの設定 ステータスバーの表示文字列を変える サンプルプログラム ステータスバーを作成し、そこに表示する文字を変更するプログラムです。 右クリックすると「right button click!」、左ク…

【C++/OpenGL】NO.4 イベント処理(Callback関数)一覧

プログラム 実行結果 解説 プログラム サンプルプログラムです。このプログラムにイベント処理の内容を付け加えただけです #include <GL/glew.h> #include <GLFW/glfw3.h> #include <Windows.h> #include <stdio.h> #include <iostream> GLint makeShader() { const char* vertex_shader = "#version 400\n" "in vec3</iostream></stdio.h></windows.h></glfw/glfw3.h></gl/glew.h>…

【C++/OpenGL】NO.3  複数の四角形表示

このページの内容 プログラム 実行結果 解説 複数のポリゴンを描画する 変更点1(GLfloat points[]) 変更点2(GLfloat colors[]) 変更点3(VBOのサイズ変更) 変更点4(glDrawArrays関数) 実行結果 このページの内容 前回はもっとも簡単なプログラムで三…