Slide 16
Slide 16 text
C++版(C++処理関数)
void doOpenCvTask(size_t addr, int width, int height, int cnt) {
auto data = reinterpret_cast(addr);
cv::Mat rgbaMat(height, width, CV_8UC4, data);
cv::Mat rgbMat;
cv::Mat rgbOutMat;
cv::Mat outMat;
cv::cvtColor(rgbaMat, rgbMat, cv::COLOR_RGBA2RGB); // RGBA->RGB
rgbMat.convertTo(rgbOutMat, -1, 1.0, cnt % 200 - 100.0); // -100〜+100
cv::cvtColor(rgbOutMat, outMat, cv::COLOR_RGB2RGBA); // RGBAに戻す
// メモリ解放処理いらない
if (SDL_MUSTLOCK(screen)) // 描画処理はちょっと⾯倒
SDL_LockSurface(screen);
cv::Mat dstRGBAImage(height, width, CV_8UC4, screen->pixels);
outMat.copyTo(dstRGBAImage);
if (SDL_MUSTLOCK(screen))
SDL_UnlockSurface(screen);
SDL_Flip(screen);
}
16