-
Notifications
You must be signed in to change notification settings - Fork 13
cv::parallel_for_を使ってみる
atinfinity edited this page Jun 20, 2015
·
25 revisions
行毎に並列化して二値化を行うサンプルです.
#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
class TestParallelLoopBody : public cv::ParallelLoopBody
{
private:
cv::Mat _src;
cv::Mat _dst;
public:
TestParallelLoopBody(const cv::Mat& src, cv::Mat& dst)
: _src(src), _dst(dst) { }
void operator() (const cv::Range& range) const
{
int row0 = range.start;
int row1 = range.end;
cv::Mat srcStripe = _src.rowRange(row0, row1);
cv::Mat dstStripe = _dst.rowRange(row0, row1);
cv::threshold(srcStripe, dstStripe, 100, 255, cv::THRESH_BINARY);
}
};
int main(int argc, char *argv[])
{
cv::Mat src = cv::imread("lena.jpg", cv::IMREAD_GRAYSCALE);
cv::Mat dst = cv::Mat::zeros(src.size(), CV_8UC1);
cv::parallel_for_
(
cv::Range(0, dst.rows),
TestParallelLoopBody(src, dst)
);
cv::namedWindow("dst");
cv::imshow("dst", dst);
cv::waitKey(0);
cv::destroyAllWindows();
return 0;
}
筆者はOpenCV 3.0.0で動作確認しました.