OpenCVを使ってLenaさんを白黒にする。(0004)
OpenCVを使ってLenaさんを白黒にする。
グレースケールの画像とカラーだけど白黒画像を作ってみる。
#include <string> #include <opencv2/opencv.hpp> //画面をだすよ void display(cv::Mat image) { //名前をつける std::string windowName = "windowName"; cv::namedWindow(windowName); //画面出た!! cv::imshow(windowName, image); //なにかキーをおして~ cv::waitKey(0); //整理整頓 cv::destroyWindow(windowName); } // // ここから // int main(int argc, char** argv) { //lenaさん登場!! cv::Mat lena = cv::imread("lena.jpg"); int cols = lena.cols; int rows = lena.rows; //lenaさんと同じサイズのグレースケール画像 cv::Mat image = cv::Mat::zeros(cols, rows, CV_8UC1); for (int j = 0; j < rows; j++) { for (int i = 0; i < cols; i++) { image.at<uchar>(j, i) = (lena.at<cv::Vec3b>(j, i)[0] + lena.at<cv::Vec3b>(j, i)[1] + lena.at<cv::Vec3b>(j, i)[2] ) / 3; } } //画面に出して!! display(image); //lenaさんと同じサイズのカラー画像 cv::Mat image2 = cv::Mat::zeros(cols, rows, CV_8UC3); for (int j = 0; j < rows; j++) { for (int i = 0; i < cols; i++) { int pix = (lena.at<cv::Vec3b>(j, i)[0] + lena.at<cv::Vec3b>(j, i)[1] + lena.at<cv::Vec3b>(j, i)[2] ) / 3; image2.at<cv::Vec3b>(j, i)[0] = pix; //青 image2.at<cv::Vec3b>(j, i)[1] = pix; //緑 image2.at<cv::Vec3b>(j, i)[2] = pix; //赤 } } //画面に出して!! display(image2); }