[SDL] SDL OpenCV
C, C++ 2024. 1. 27. 01:00 |반응형
SDL에서 OpenCV를 사용해 보자.
아래와 같이 비주얼 스튜디오에서 SDL과 OpenCV를 사용할 수 있도록 적절히 세팅한다.
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 <iostream>
#include "SDL.h"
#include "opencv2/opencv.hpp"
int main(int argc, char* argv[]) {
SDL_Init(SDL_INIT_VIDEO);
SDL_Window* window = SDL_CreateWindow("SDL Test", SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_RESIZABLE);
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, 0);
//////////////////// cv::Mat to SDL_Texture ////////////////////
cv::Mat image = cv::imread("image.png", cv::IMREAD_COLOR);
SDL_Rect destRect = { 0, 0, image.cols, image.rows };
SDL_Texture* texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_BGR24,
SDL_TEXTUREACCESS_STREAMING, image.cols, image.rows);
SDL_UpdateTexture(texture, NULL, (void*)image.data, image.step1());
// SDL_UpdateTexture() 대신 아래 주석 처리된 코드를 사용할 수도 있다.
// #include <opencv2/core/types_c.h> 필요.
/*
IplImage iplImage = cvIplImage(image);
unsigned char* texture_data = NULL;
int texture_pitch = 0;
SDL_LockTexture(texture, 0, (void**)&texture_data, &texture_pitch);
memcpy(texture_data, (void*)iplImage.imageData,
iplImage.width * iplImage.height * iplImage.nChannels);
SDL_UnlockTexture(texture);
*/
////////////////////////////////////////////////////////////////
SDL_Event event;
bool quit = false;
while (!quit) {
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_QUIT:
quit = true;
break;
case SDL_KEYDOWN:
printf("Key pressed: %s\n", SDL_GetKeyName(event.key.keysym.sym));
if (event.key.keysym.sym == SDLK_ESCAPE)
quit = true;
break;
default:
break;
}
}
SDL_SetRenderDrawColor(renderer, 255, 255, 255, SDL_ALPHA_OPAQUE);
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, texture, NULL, &destRect);
SDL_RenderPresent(renderer);
}
SDL_DestroyTexture(texture);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
|
코드를 작성하고 빌드한다.
반응형
'C, C++' 카테고리의 다른 글
[SDL] SDL Box2D Collision - Box2D 충돌 (1) | 2024.01.30 |
---|---|
[SDL] SDL Box2D - 물리 라이브러리 (0) | 2024.01.27 |
[SDL] SDL Dear ImGui Project - SDL Dear ImGui SDL 프로젝트 (1) | 2024.01.26 |
[SDL] Dear ImGui SDL Renderer Examples - Dear ImGui SDL 렌더러 예제 (0) | 2024.01.25 |
[SDL] SDL_mixer Audio - SDL 믹서 오디오 (0) | 2024.01.24 |