私はRGB
の画像を処理しており、各チャンネル(R + G + B)で同じことをしているので、コードを改善して実行するのに役立つ並列関数を探していました。 *?) もっと早く。今、イムので、同じようforEach
機能を使用して:OpenCV forEach関数の並列アクセス
unsigned char lut[256];
for (int i = 0; i < 256; i++)
lut[i] = cv::saturate_cast<uchar>(pow((float)(i/255.0), fGamma) * 255.0f); //pow: power exponent
dst.forEach<cv::Vec3b> //dst is an RGB image
(
[&lut](cv::Vec3b &pixel, const int* po) -> void
{
pixel[0] = lut[(pixel[0])];
pixel[1] = lut[(pixel[1])];
pixel[2] = lut[(pixel[2])];
}
);
しかし、私は実行中のスレッドの数を確認するためにhtop
を使用する場合、私は..
上の1つのまたは2つのスレッドを見つける私がやっています何か間違っているかforEach
はmulti-threading
で実行されませんか? multi-threading
の計算に手伝ってくれるリソースがありますか?
私はこれでUbuntuの上で私のコードを実行している:
g++ -std=c++1z -Wall -Ofast -march=native test3.cpp -o test3 `pkg-config --cflags --libs opencv`
プラットフォーム固有のようです。 OpenCVのどのバージョン? v3.1.0のWindowsでは、すべてのコアを完全に使用します。 –
@DanMašek私はLinuxでOpenCV 3.3を使用しています –