OpenCVを使ってLenaさんを減色にする。(0005)
Lenaさん画像は256x256x256の16777216色だが、減色して64色にしてみる。
256を64で割ると各色4種類。4x4x4=64色、減色にともなって暗くなるので
ちょっと明るくする加工を少し追加。
//画面をだすよ void display(cv::Mat image) { //名前をつける std::string windowName = "windowName"; cv::namedWindow(windowName); //画面位置固定 cv::moveWindow(windowName,100,100); //画面出た!! 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; int reduce = 256 / 4; for (int j = 0; j < rows-10; j++) { for (int i = 0; i < cols ; i++) { for (int k = 0; k < 3 ; k++) { image.at<cv::Vec3b>(j, i)[k] = lena.at<cv::Vec3b>(j, i)[k] / reduce * reduce + reduce/2; } } } //画面に出して!! display(image); }
オリジナルLenaさん
減色Lenaさん
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); }
OpenCVを使って真っ白な画像を作成する(0003)
真っ白な画面はすべてのチャンネルを255にする。
#include <string> #include <opencv2/opencv.hpp> //画面をだすよ void display(cv::Mat image) { //名前をつける std::string windowName = "windowName"; cv::namedWindow(windowName); //画面出た!! cv::imshow(windowName, image); //なにかキーをおして~ cv::waitKey(1000 * 10); //整理整頓 cv::destroyWindow(windowName); } // // ここから // int main(int argc, char** argv) { //100x100の画像 CV_8UC3(8bit 3チャンネル) cv::Mat image = cv::Mat::zeros(500, 500, CV_8UC3); int cols = image.cols; int rows = image.rows; for (int j = 0; j < rows; j++) { for (int i = 0; i < cols; i++) { image.at<cv::Vec3b>(j, i)[0] = 255; //青 image.at<cv::Vec3b>(j, i)[1] = 255; //緑 image.at<cv::Vec3b>(j, i)[2] = 255; //赤 } } //画面に出して!! display(image); }
OpenCVを使って真っ青な画像を作成する(0002)
まず真っ黒な画面を作成し、次に 真っ青な画像を作成する
#include <string> #include <opencv2/opencv.hpp> //画面をだすよ void display(cv::Mat image) { //名前をつける std::string windowName = "windowName"; cv::namedWindow(windowName); //画面出た!! cv::imshow(windowName, image); //なにかキーをおして~ cv::waitKey(1000 * 10); //整理整頓 cv::destroyWindow(windowName); } // // ここから // int main(int argc, char** argv) { //500x500の画像 CV_8UC3(8bit 3チャンネル) cv::Mat image = cv::Mat::zeros(500, 500, CV_8UC3); //これで真っ黒 //青いチャンネルだけ255にする。 int cols = image.cols; int rows = image.rows; for (int j = 0; j < rows; j++) { for (int i = 0; i < cols; i++) { image.at<cv::Vec3b>(j, i)[0] = 255; //青 } } //画面に出して!! display(image); }
OpenCVを使って真っ黒な画像を作成する(0001)
真っ黒な画像を作成する方法、すべてのピクセルが0つまり真っ黒
サイズは500x500。
#include <string> #include <opencv2/opencv.hpp> //画面をだすよ void display(cv::Mat image){ //名前をつける std::string windowName = "window"; cv::namedWindow(windowName); //画面出た!! cv::imshow(windowName, image); //なにかキーをおして~ cv::waitKey(0); //整理整頓 cv::destroyWindow(windowName); } // // ここから // int main(int argc, char** argv) { //500x500の画像 CV_8UC3(8bit 3チャンネル) cv::Mat image = cv::Mat::zeros(500, 500, CV_8UC3); //画面に出して!! display(image); }