OpenCV

プログラミング

【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++】OpenCVで日本語テキストを描画する方法【ImageMagick】

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

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

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

【C++/Python】OpenCVによるガンマ補正

今回はOpenCVでガンマ補正を実装する方法についてです。ガンマ補正はOpenCVに関数が実装されていないため自前で実装する必要があります。1. ガンマ補正とは画像データを入力Input, ディスプレイに表示される明るさをOutputとした...
プログラミング

【C++】EigenのMatrixクラスにOpenCVのMatクラスを入力する方法【Mapクラス】

EigenのMatrixクラスに配列を入力したい場合があると思います。今回はEigen::Mapクラスを使用してEigenのMatrixクラスに配列の値を入力する方法と、それを応用してOpenCVのMatクラスとEigenのMatrixクラ...
プログラミング

【OpenCV】cv::Matとunsigned char*の相互変換

OpenCVのcv::Matクラスとunsigned char*の相互変換についてです。画像の入出力にOpenCVを使って画像処理自体は配列を直接操作したい場合があると思います。そのため、今回はcv::Matクラスと配列(符号なし8bitデ...
環境構築

【C++】OpenCV+Visual Studio 2022の環境構築

今回はOpenCVをVisual Studio2022で使用できるように設定していこうと思います。最近は「OpenCV」で検索してもPythonの記事ばかりですがここではC++版の環境構築について解説します。1. OpenCVのダウンロード...