6
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

快適なC++生活のためにスクリプト言語を使おう - OpenCV-Python をC++に移植する -

Last updated at Posted at 2017-05-18

OpenCV-PythonはOpenCVを利用したアルゴリズムを開発するのに、開発しやすい環境です。
そこで開発したアルゴリズムをC++に移植すときのヒントとなるメモを記す。

OpenCV-Pythonの場合:
numpy.array型の利用

cv::Mat型への置き換え
numpy.array型固有のメソッドを
cv::Mat型のメソッドへの置き換え。

このような書き換えが、簡単にできます。
画像処理のアルゴリズムを構築できるほどの経験がなくても、C++の経験さえあれば、OpenCV-Pythonのコードを OpenCV C++に書き換えることができます。

numpy.array cv::Mat 注意点
a = np.ones((h,w), dtype=np.uint8) cv::Mat a=cv::Mat::ones(cv::Size(w, h), cv::CV_8U);
shape size shapeは[h, w, channel]の順番、または[h, w]
img.shape cv::Size(img.rows, img.cols)
img = cv2.imread("lena.png"); imgRGB=img[:, :, ::-1] cv::Mat img = cv::imread("lena.png"); cv2.imread()はBGRの順
import pylab as plt; plt.imshow(imgRGB) cv::imshow("title", img); matplotlib のimshow()はMatlabのimshow()に近い
a[:, :] = 0 a.setTo(0);  カラー画像の場合は a[:, :, :] = 0 。setTo()の引数は定数
a[b>127] = 255 a.setTo(255, b > 127);
a = b+0 b.copyTo(a); numpyでは単にa = b とするとaはbに対する別名で、実体は同じになる。
a[c==d] = b[c==d] b.copyTo(a, c==d);  
a = np.array(b, dtype=np.float32)/255.0 b.convertTo(a, CV_32F, 1.0/255);

OpenCV-Pythonのコード例

example.py
# -*- coding: utf-8 -*-

import cv2
import numpy as np
img = cv2.imread("lena.png", 0)

b = np.zeros(img.shape[:2], dtype=np.uint8)
b[img > 128] = 255
cv2.imwrite("junk.png", b)

書き換えたC++のソースコードの例

example.cpp
#include <opencv2/opencv.hpp>
int main(int argc, char* argv[]) {
    cv::Mat img= cv::imread("lena.png", 0);
    cv::Mat b = cv::Mat::zeros(cv::Size(img.rows, img.cols), CV_8U);
    b.setTo(255, img>127);
    cv::imwrite("junk_cpp.png", b);
}

実行結果の画像
junk.png


numpyにある便利な関数
numpy.rot90(m, k=1, axes=(0, 1) (https://docs.scipy.org/doc/numpy-1.12.0/reference/generated/numpy.rot90.html)

注意

C++のバージョンが上がるのにともなって、OpenCVで前提とするC++のバージョンも変化しています。この記載内容が古くなっています。

6
9
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
6
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?