01647

ustreamer-01647

ファイル出力と画像加工

ファイル出力

NetBeans 7.4にOpenCV 2.4.8を設定する - 01647で示したサンプルコードは,画像データをファイルから読み込み,表示した.その画像データをファイルとして出力する.前回のコードにimwrite()を加えるのみ.

C++: bool imwrite(const string& filename, InputArray img, const vector& params=vector())

Reading and Writing Images and Video — OpenCV 2.4.8.0 documentation

コード

/* 
 * 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