Skip to content

cv::parallel_for_を使ってみる

atinfinity edited this page Jun 20, 2015 · 25 revisions

cv::parallel_for_を使ってみる

はじめに

サンプルコード

行毎に並列化して二値化を行うサンプルです.

#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で動作確認しました.


Menu

Computer Vision

GPGPU

AR

ROS

Docker

Jetson

ARM

プログラミング言語

開発環境

勉強会

Clone this wiki locally