ファイル出力と画像加工
ファイル出力
NetBeans 7.4にOpenCV 2.4.8を設定する - 01647で示したサンプルコードは,画像データをファイルから読み込み,表示した.その画像データをファイルとして出力する.前回のコードにimwrite()を加えるのみ.
C++: bool imwrite(const string& filename, InputArray img, const vector
Reading and Writing Images and Video — OpenCV 2.4.8.0 documentation& params=vector ())
コード
/* * File: main.cpp * Author: paul * * Created on 2014/03/01, 15:15 */ #include <cstdlib> #include <opencv2/highgui/highgui.hpp> using namespace std; /* * */ int main(int argc, char** argv) { // 画像データ cv::Mat image; // 画像読込 image = cv::imread("lena.jpg"); // 読込成功確認 if (!image.empty()) { // ウインドウ作成 cv::namedWindow("window name"); // 画像表示 cv::imshow("window name", image); // キー入力を待つ cv::waitKey(); // ファイル出力 cv::imwrite("imwrite.png", image); } return 0; }
画像加工
別プロジェクトにしよう.これまで編集していたimreadimshowプロジェクトの右クリックメニューからコピーを選ぶ.プロジェクト名はimgprocとした.
imgprocの機能を使用する
imgprocの機能を使用するため,そのライブラリファイルを指定する.プロジェクトプロパティを開き,「すべての構成」の状態でビルド>リンカー>追加のオプションに -lopencv_imgproc248.dll を追記する.main.cppでもimgproc.hppをincludeする.
画像表示関数化
画像を1枚表示するための2行を面倒に感じて,関数化した.imshowの定義を参照して設定した.
medianBlur
C++: void medianBlur(InputArray src, OutputArray dst, int ksize)
Image Filtering — OpenCV 2.4.8.0 documentation
画像が変化するなら何でも良かった.明らかな変化を確認したかったので,ksizeを15とした.
コード
/* * File: main.cpp * Author: paul * * Created on 2014/03/01, 15:15 */ #include <cstdlib> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> using namespace std; // 画像表示 void show(const string &winname, cv::InputArray mat) { // ウインドウ作成 cv::namedWindow(winname); // 画像表示 cv::imshow(winname, mat); } /* * */ int main(int argc, char** argv) { // 画像データ cv::Mat image; // 画像読込 image = cv::imread("lena.jpg"); // 読込成功確認 if (!image.empty()) { // 元画像表示 show("original", image); // 画像加工 cv::Mat work; // http://docs.opencv.org/modules/imgproc/doc/filtering.html#medianblur cv::medianBlur(image, work, 15); show("mediumBlur", work); // キー入力を待つ cv::waitKey(); // ファイル出力 cv::imwrite("imwrite.png", work); } return 0; }
typo
x: mediun. o:median