LoginSignup
4
1

More than 3 years have passed since last update.

OpenCVで油絵エフェクトは1行でかけるとのことです。(C++限定)

Last updated at Posted at 2019-10-14

背景

opencv-contrib-pythonには割と最近作成されたパッケージやライブラリがここにgithub経由でコミットされています。contribはcontribute:寄付という意味らしいです。(英語苦手:sweat_smile:)
そこから、面白そうなのはないかと探していると xphoto::oilPainting (油絵エフェクト)メソッドを見つけました。おそらくこのメソッドはまだPythonにはなくC++にしか現在のところないっぽいです。

開発

makefile

Mac環境でOpenCVをmakefileを使ってコンパイルする方法 にあるmakefileを少し修正します。

CXX = c++
CXXFLAGS =  -I/usr/local/Cellar/opencv/4.1.1_2/include/opencv4/
LDFLAGS = -L/usr/local/Cellar/opencv/4.1.1_2/lib/
LDLIBS =  -lopencv_core -lopencv_highgui -lopencv_imgcodecs -lopencv_xphoto
CXXVERSION = -std=c++11

paint: paint.cpp
    $(CXX) $< -o $@ $(CXXFLAGS) $(CXXVERSION) $(LDFLAGS) $(LDLIBS)

clean :
    rm paint

今回の油絵エフェクトメソッドを使うためには opencv_xphoto が必要になるのでライブラリファイルを追加します。

cpp

#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/xphoto.hpp>

int main(int argc, const char* argv[]) {
    cv::Mat src = cv::imread("./mikan.jpg");
    cv::Mat dst;

    if (src.empty()) {
        std::cout << "read error.\n";
        return -1;
    }

    cv::xphoto::oilPainting(src, dst, 10, 1, cv::COLOR_BGR2Lab);

    cv::namedWindow("oil painting effect", cv::WINDOW_AUTOSIZE);
    cv::imshow("oil painting effect", dst);
    cv::waitKey(0);
    cv::destroyAllWindows();

   return 0;
}

インクルードも同様に #include <opencv2/xphoto.hpp> と宣言を追加します。

結果

ソース画像 (その1)

いつもの通りみかん星人です。
mikan.jpg

Processed (その1)

oil.png

それっぽく油絵になりました。
まゆ毛濃いです。(元からか)

ソース画像 (その2)

Instagram 橋本環奈(多分公式) にあった最新の投稿画像を使ってみます。
kanna.png

Processed (その2)

xphoto::oilPainting の3つめの引数を 10 -> 5 にしています。おそらく筆の太さと同義です。低めに設定しないと顔の輪郭が表示しにくくなります。
kanna_dst.png

まとめ

opencvが4系になってかなりモジュール・メソッドが増えた。
今まで使ってこなかったメソッドを探すのは後で使おうと思った時に役に立つ、気がします。:robot:

参考になりそうなリンク

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1