[ Video ]
[ About ]
ネットでRGBずらしという記事からインスピレーションを受けて(パクって)、openFrameworks + OpenCVを使って似たような事をしてみました。
記事の中では静止画でしたが、動画でチャレンジです。
最初はUSBカメラからリアルタイムにやって見たんだけど、絵力がなかったので、ネットのフリー素材動画を拝借しました。
全体でRGBをずらすと目に悪そうなものが出来上がったので、フレームでずらしました。
そのため、動いている部分だけRGBがずれる形になります。
なぜかOpenCVのMatイメージとofImageを同期させるのは前からよくやっていた手法なんですが、今回は何故かopenFrameworksで表示される画像が青味がかったものになったので、OpenCVで表示してます。
(そのため使っているのは実質、OpenCVだけです)
[ Source ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
#pragma once #include "ofMain.h" #include <opencv2/opencv.hpp> class ofApp : public ofBaseApp { public: void setup(); void update(); void draw(); void keyPressed(int key) {}; void keyReleased(int key) {}; void mouseMoved(int x, int y) {}; void mouseDragged(int x, int y, int button) {}; void mousePressed(int x, int y, int button) {}; void mouseReleased(int x, int y, int button) {}; void mouseEntered(int x, int y) {}; void mouseExited(int x, int y) {}; void windowResized(int w, int h) {}; void dragEvent(ofDragInfo dragInfo) {}; void gotMessage(ofMessage msg) {}; ofEasyCam cam; cv::VideoCapture cap; cv::Mat cap_frame; cv::Mat save_farme[2]; int save_index; cv::Mat blend_frame; ofImage blend_image; }; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
#include "ofApp.h" //-------------------------------------------------------------- void ofApp::setup() { ofSetFrameRate(30); ofBackground(0); ofSetWindowTitle("Insta"); this->cap.open("dance2.mp4"); this->blend_image.allocate(this->cap.get(CV_CAP_PROP_FRAME_WIDTH) * 0.5, this->cap.get(CV_CAP_PROP_FRAME_HEIGHT) * 0.5, OF_IMAGE_COLOR); this->blend_frame = cv::Mat(this->blend_image.getHeight(), this->blend_image.getWidth(), CV_MAKETYPE(CV_8UC3, this->blend_image.getPixels().getNumChannels()), this->blend_image.getPixels().getData(), 0); this->save_index = 0; } //-------------------------------------------------------------- void ofApp::update() { this->cap >> this->cap_frame; if (this->cap_frame.empty()) { return; } cv::resize(this->cap_frame, this->cap_frame, cv::Size(), 0.5, 0.5); if (ofGetFrameNum() % 2 == 0) { this->cap_frame.copyTo(this->save_farme[this->save_index % 2]); this->save_index++; } if (ofGetFrameNum() > 6) { for (int x = 0; x < this->blend_frame.cols; x++) { for (int y = 0; y < this->blend_frame.rows; y++) { this->blend_frame.at<cv::Vec3b>(y, x) = cv::Vec3b(this->cap_frame.at<cv::Vec3b>(y, x)[0], this->save_farme[0].at<cv::Vec3b>(y, x)[1], this->save_farme[1].at<cv::Vec3b>(y, x)[2]); } } cv::imshow("blend", blend_frame); cv::waitKey(1); } } //-------------------------------------------------------------- void ofApp::draw() { /* // ofImageがなぜか青みがかった感じになってしまうので、断念 this->cam.begin(); this->blend_image.update(); this->blend_image.draw(-this->blend_image.getWidth() / 2, -this->blend_image.getHeight() / 2); this->cam.end(); */ } //-------------------------------------------------------------- int main() { ofSetupOpenGL(720, 720, OF_WINDOW); ofRunApp(new ofApp()); } |
[ Link ]
https://github.com/junkiyoshi/Insta20180101
輪郭をブレさせて色ずれを起こすテクニック「RGBずらし」が話題! 簡単にエモい雰囲気の画像が作れるスゴ技 (1/2)
http://nlab.itmedia.co.jp/nl/articles/1712/30/news032.html
Video
https://videos.pexels.com/videos/capoiera-street-dance-1465