読者です 読者をやめる 読者になる 読者になる

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さん

f:id:treehitsuji:20150125104314p:plain

減色Lenaさん

f:id:treehitsuji:20150125104327p:plain

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);
}

f:id:treehitsuji:20150118142431p:plain

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);

}

f:id:treehitsuji:20150112223154p:plain

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);

}

f:id:treehitsuji:20150112220932p:plain

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);
}

f:id:treehitsuji:20150112215006p:plain