プログラミング

プログラミング

【C++】OpenCVのcv::thresholdはなぜ高速なのか?自前の2値化を最適化して速度比較してみた

2値化処理自体は一見単純な処理に見えますが、OpenCVの内部では様々な最適化処理が施されています。行ごとに画像を分割して並列処理SIMDによる高速化HAL(Hardware Abstraction Layer)と呼ばれるCPU命令セットや...
プログラミング

【C++】SIMD+OpenMPによる2値化処理の高速化【OpenCV比較】

OpenCVの2値化処理を行う関数には「cv::threshold」がありますが、この関数はとにかく速いです。アルゴリズム自体は閾値を境に画素値を0と1(1Byteなら255)に振り分けるだけなので実装自体は簡単なのですが、ただ実装するだけ...
プログラミング

【Windows】共有メモリを使用してC++とPython間で画像の送受信を行う方法

PythonとC++の間でデータのやり取りをしたい場合があると思います。単純なアプリならどちらかをDLL化してしまえば解決しますが、外部のAPIを使用していると片方には対応していなかったり、 処理が複雑でプロセスごとに切り分けたいなど、そう...
プログラミング

PyTorchで学習したVGG16をLibTorchで推論する方法

PyTorchで学習したVGG16モデルをLibTorchで読み込み、推論を行う方法についてまとめました。今回はtorchvisionに実装されているVGG16モデルをLibTorchで読み込める形式に変換して推論を実行し、PyTorchで...
プログラミング

【C++】Visual StudioでDLLをデバッグする方法

DLL(Dynamic Link Library)はプログラム実行時に動的に読み込むライブラリです。特定の機能を他のアプリケーションでも使用したい場合に便利ですが、DLL単体では実行することができず呼び出し元のアプリケーションが必要になるた...
プログラミング

【C++】OpenCVで日本語テキストを描画する方法【ImageMagick】

OpenCVで読み込んだ画像にテキストを描画するための関数としてputTextがありますが、残念ながら日本語フォントには対応していません。PythonであればPillowに変換してからImageDrawで描画すれば可能ですがC++にはありま...
プログラミング

【PyTorch】自作データセットを使ったFaster R-CNNの学習手順

今回は自作のデータセットを読み込み、PyTorchの物体検出モデルで学習(ファインチューニング)させる手順についてまとめました。自作のデータセットにはLabelmeで作成したアノテーションデータを使用し、物体検出モデルにはTorchVisi...
プログラミング

【C++】ImageMagickの基本操作【Imageクラス】

今回はImageMagickに実装されているImageクラスのメソッドの基本的な使い方についていくつか紹介します。※ImageMagicのインストールはこちら。1. 画像の読み込み・保存画像の読み込みと保存には以下のメソッドを使用します。v...
プログラミング

【PyTorch】Labelmeで作成したアノテーションデータを読み込んだデータセットを作成

Pytorchには学習済みモデルが実装されており関数を呼び出すだけですぐに使えるようになっています。「VGG16」や「Resnet18」などは画像データをTensorに変換したデータを入力すれば出力を得ることができますが、 「Faster ...
プログラミング

【C++】OpenCVとImageMagickの相互変換

今回はOpenCVのcv::MatクラスとImageMagickのMagick::Imageクラスの相互変換についてです。1. cv::Matクラス→Magic::Imageクラス以下の画像をOpenCVで読み込み、ImageMagickに...