大学のOpenCV課題では、画像を読み込み、ノイズ除去前後の比較や特定画素値の表示を行うことが求められることがあります。この記事では、Visual StudioのC++環境でメディアンフィルタを使ったノイズ除去の簡単なコード例と解説を紹介します。
必要なOpenCV関数と役割
課題で使用する主な関数は次の通りです:
- cv::imread:画像の読み込み
- cv::medianBlur:メディアンフィルタによるノイズ除去
- cv::namedWindow:ウィンドウの作成
- cv::imshow:画像表示
- cv::waitKey:表示を維持
これらを組み合わせることで、ノイズ除去前後の画像比較や画素値確認が可能です。
簡単なコード例
以下はフィルタサイズ3のメディアンフィルタを使用した例です。
#include <opencv2/opencv.hpp>
#include <iostream>
int main() {
cv::Mat src = cv::imread("image.jpg");
if(src.empty()) {
std::cout << "画像を読み込めませんでした" << std::endl;
return -1;
}
cv::Mat dst;
cv::medianBlur(src, dst, 3); // フィルタサイズ3のメディアンフィルタ
cv::Vec3b pixel = dst.at<cv::Vec3b>(200, 300);
std::cout << "(R,G,B) = (" << (int)pixel[2] << "," << (int)pixel[1] << "," << (int)pixel[0] << ")" << std::endl;
cv::namedWindow("Original", cv::WINDOW_AUTOSIZE);
cv::imshow("Original", src);
cv::namedWindow("MedianFiltered", cv::WINDOW_AUTOSIZE);
cv::imshow("MedianFiltered", dst);
cv::waitKey(0);
return 0;
}
コードの流れ解説
1. cv::imreadで画像を読み込み、存在確認を行います。
2. cv::medianBlurでノイズ除去を行い、結果をdstに格納します。
3. dst.at<cv::Vec3b>(200,300)で指定画素のRGB値を取得し、コンソールに出力します。OpenCVではBGR順のため、出力時にR,G,Bの順に並べています。
4. cv::namedWindowとcv::imshowでノイズ除去前後の画像をウィンドウに表示します。
5. cv::waitKey(0)でユーザーがキー入力するまで表示を維持します。
ポイントと注意点
フィルタサイズは奇数で指定する必要があります。メディアンフィルタはノイズ除去に有効ですが、画像のエッジを保持する特性があります。
また、画素値を確認する際は、BGR順で格納されている点に注意してください。
まとめ
Visual Studio C++とOpenCVを使うと、画像のノイズ除去や特定画素のRGB値表示を簡単に実装できます。今回紹介した流れは、課題だけでなく実務的な画像処理でも応用可能です。


コメント