OpenCV ピクセル単位でRGBの値を変更
これとか
【OpenCV】IplImageの輝度値を参照、設定する 画像処理ソリューション
これ読んだら
なんとなーくIplImageのデータがどんな風に並べられているかわかった。
ので、
opencv.jp - OpenCV: 基本構造体(Basic Structures)サンプルコード -
これをちょちょっといじって、
トラックバーを触るたびに各ピクセルのRGBを順番に入れ替えるようにしてみた。
#include "opencv/cv.h" #include "opencv/highgui.h" void Trackbar(int val); IplImage* img; //トラックバーの関数から操作するためにグローバル関数に置く int main(){ img = cvLoadImage("/Users/ぼくのなまえ/Desktop/ff.jpg", CV_LOAD_IMAGE_COLOR); cvNamedWindow ("RGBchanger", CV_WINDOW_AUTOSIZE); cvShowImage ("RGBchanger",img); cvCreateTrackbar("Move it", "RGBchanger", 0, 100, Trackbar); cvWaitKey (0); cvDestroyWindow("RGBchanger"); cvReleaseImage(&img); return 0; } uchar p[3]; int x,y; void Trackbar(int val){ for (y = 0; y < img->height; y++) { for (x = 0; x < img->width; x++) { p[0] = img->imageData[img->widthStep * y + x * 3]; // B p[1] = img->imageData[img->widthStep * y + x * 3 + 1]; // G p[2] = img->imageData[img->widthStep * y + x * 3 + 2]; // R img->imageData[img->widthStep * y + x * 3] = p[1]; img->imageData[img->widthStep * y + x * 3 + 1] = p[2]; img->imageData[img->widthStep * y + x * 3 + 2] = p[0]; } } cvShowImage ("RGBchanger", img); }
ビカビカビカビカ
グリッチアートをつくりたいという動機でOpenCVを始めたわけですが、The Wordpad Glith と呼ばれるバイナリデータの文字置き換えによる手法
←これ
は、jpgとかpngとかの圧縮画像データだからなるわけで、OpenCVの中ではできないんじゃね?メモ帳使った方が早いんじゃね?