画素ごとの濃淡変換

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
hnkto
記事: 10
登録日時: 7年前

画素ごとの濃淡変換

#1

投稿記事 by hnkto » 7年前

カラー画像を入力とし,HSV 変換し,V 画像を出力せよ.その後すべての画素に対して,色相を 30
度回転させて,彩度を 1.0(最大値)としたのちに,RGB に変換した結果を出力せよ.元の画像で輝度 が低い部分で何が起きているのかを中心に,HSV 変換について考察せよ.
という、C++の課題なのですが、C++を全く授業でやったことがないのに画像処理の講義を取ったため、このプログラムが何をしているか全くわかりません。どなたか解説をお願いしたいです、よろしくお願いします。

コード:

#include "common.h"


cv::Mat change_param(cv::Mat_<cv::Vec3b> image)
{
	cv::Mat_<cv::Vec3b> dst;
	std::vector<cv::Mat> planes;
	

	cv::cvtColor(image, dst, CV_BGR2HSV);	//RGBからHSVに変換

	cv::split(dst, planes);		//3チャネルを分割して
	cv::imshow("v", planes[2]);	//HSVの3チャネル目であるplanes[2]を画面に表示
	cv::waitKey();
	cv::imwrite("v.jpg", planes[2]);	//このコメントを外せばV画像を出力可

	for (int i = 0; i < dst.rows; ++i)
	{
		for (int j = 0; j < dst.cols; ++j)
		{
			int tmp = dst(i, j)[0] -15;	
			if (tmp > 180) tmp -= 180;		//HSVの色相Hに30度足す.
											//ただし,Hは0から359が1から180にマッピングされていることに注意
											//http://opencv.jp/opencv-2.1/cpp/miscellaneous_image_transformations.html
											//のcv::cvtColorの項目を確認してください
			dst(i, j)[0] = tmp;
			dst(i, j)[1] = 255;				//彩度Sを最大値にする.Hと同様に仕様を確認して適切な値に変更する
		}
	}
	cv::cvtColor(dst, dst, CV_HSV2BGR);		//RGBに戻す

	return dst;
}

int main(int argc, char* argv[])
{
	cv::Mat_<cv::Vec3b> image, out;
	if (argc > 1)
	{
		image = cv::imread(argv[1]); 
	}
	else {
		image = cv::imread("C:¥¥opencv32¥¥sources¥¥samples¥¥data¥¥baboon.jpg");
	}
	cv::imshow("input", image);

	cv::waitKey();

	out=change_param(image);

	cv::imshow("Change Hue ", out);
	cv::waitKey();
	return 0;
}


アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: 画素ごとの濃淡変換

#2

投稿記事 by usao » 7年前

> C++を全く授業でやったことがないのに画像処理の講義を取った

そんなの自業自得だし.


> このプログラムが何をしているか全くわかりません

もはや文章になる勢いでコメント書いてあるし……それ以前にあなたの文章自体が内容そのものだったりしないんですか?

返信

“C言語何でも質問掲示板” へ戻る