OpenCV グリッチアート

やっとグリッチアートっぽいものが完成した。


f:id:highdef:20140223051033g:plain

f:id:highdef:20140223051043g:plain

#include "opencv/cv.h"
#include "opencv/highgui.h"


void Trackbar(int val);

IplImage* img;
IplImage* originalimg;

int main(){
    
    char image[]= "/Users/Daichi/Desktop/lena.jpg";
    img = cvLoadImage(image, CV_LOAD_IMAGE_COLOR);
    originalimg = cvLoadImage(image, CV_LOAD_IMAGE_COLOR);
    
    cvNamedWindow ("RGBchanger", CV_WINDOW_AUTOSIZE);
    cvShowImage ("RGBchanger",img);
    cvCreateTrackbar("Move it", "RGBchanger", 0, 1000, Trackbar);
    cvWaitKey (0);
    cvDestroyWindow("RGBchanger");
    cvReleaseImage(&img);
    
    return 0;
}

uchar p[3];
int x,y;

void Trackbar(int val){
    int val2=val*2;
    
    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] = originalimg->imageData[img->widthStep * y + (x+val) * 3];
            img->imageData[img->widthStep * y + x * 3 + 1] = originalimg->imageData[img->widthStep * y + (x+val/3) * 3 + 1];
            img->imageData[img->widthStep * y + x * 3 + 2] = originalimg->imageData[img->widthStep * y + (x+val/2) * 3 + 2];
        }
    }
    cvShowImage ("RGBchanger", img);
}
#include "opencv/cv.h"
#include "opencv/highgui.h"


void Trackbar(int val);

IplImage* img;
IplImage* originalimg;

int main(){
    
    char image[]= "/Users/Daichi/Desktop/lena.jpg";
    img = cvLoadImage(image, CV_LOAD_IMAGE_COLOR);
    originalimg = cvLoadImage(image, CV_LOAD_IMAGE_COLOR);
    
    cvNamedWindow ("RGBchanger", CV_WINDOW_AUTOSIZE);
    cvShowImage ("RGBchanger",img);
    cvCreateTrackbar("Move it", "RGBchanger", 0, 1000, Trackbar);
    cvWaitKey (0);
    cvDestroyWindow("RGBchanger");
    cvReleaseImage(&img);
    
    return 0;
}

uchar p[3];
int x,y;

void Trackbar(int val){
    int val2=val*2;
    
    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] = originalimg->imageData[img->widthStep * (y-val2) + (x+val) * 3];
            img->imageData[img->widthStep * y + x * 3 + 1] = originalimg->imageData[img->widthStep * (y-val2/3) + (x+val/3) * 3 + 1];
            img->imageData[img->widthStep * y + x * 3 + 2] = originalimg->imageData[img->widthStep * (y-val2/2) + (x+val/2) * 3 + 2];
        }
    }
    cvShowImage ("RGBchanger", img);
}