PsychopyでOpenCV画像をImageStimで表示する

Psychopy - GitHub y軸反転と画素値をfloat(0-1)に変換すればOK。 npimg: np.ndarray # (height, width, num_channels) stimimg = np.flip(npimg.astype(np.float32) / 255, axis=0) ウインドウに表示させるサンプル import numpy as np # numpy>=1.20.1 import cv2 # type: ignore # opencv-python>=4.5.1.48 from psychopy import core # type: ignore # psychopy>=2020.2.10 from psychopy.visual import Window, ImageStim # type: ignore import sys # npimg: np.ndarray = cv2.imread('image.png', 1) npimg: np.ndarray = np.zeros((400, 400, 3), dtype=np.uint8) npimg = cv2.line(npimg, (0, 50), (400, 50), (127, 127, 127), 3) npimg = cv2.line(npimg, (50, 0), (50, 400), (255, 255, 255), 3) # cv2.imwrite('image.png', npimg) stimimg = np.flip(npimg.astype(np.float32) / 255, axis=0) window = Window((400, 400), color='black', units='pix') stim = ImageStim(window, pos=(0, 0), size=(400, 400)) stim.image = stimimg stim.draw() window.flip() core.wait(3) # while True: # stim.draw() # window.flip() # # for keys in event.getKeys(timeStamped=True): # if keys[0] in [ 'escape', 'q' ]: # sys.exit(0) # # core.wait(0.01)

2021年2月14日 · aoirint

OpenGL 2.1/4.1(GLFW)でOpenCVの画像を表示する(Python, Mac)

pip3 install PyOpenGL glfw モジュールバージョン PyOpenGL==3.1.5 glfw==1.11.0 システムのOpenGLバージョン Vendor : b'Intel Inc.' GPU : b'Intel Iris OpenGL Engine' OpenGL version : b'4.1 INTEL-14.4.23' OpenGL 2.1 mcfletch/pyopengl: Repository for the PyOpenGL Project Python3で始めるOpenGL4 - CodeLabo Python GLFWでOpenGLバージョン指定とウィンドウ表示 - CodeLabo PythonでOpenCVの画像をOpenGLで表示する - Qiita Vendor : b'Intel Inc.' GPU : b'Intel Iris OpenGL Engine' OpenGL version : b'2.1 INTEL-14.4.23' glDrawPixels import cv2 from OpenGL.GL import * import glfw if __name__ == '__main__': img = cv2.imread('lena.png', 1) img_gl = cv2.cvtColor(cv2.flip(img, 0), cv2.COLOR_BGR2RGB) glfw.init() # These parameters need to be changed according to your environment. # Mac: https://support.apple.com/ja-jp/HT202823 # glfw.window_hint(glfw.CONTEXT_VERSION_MAJOR, 4) # glfw.window_hint(glfw.CONTEXT_VERSION_MINOR, 1) # glfw.window_hint(glfw.OPENGL_FORWARD_COMPAT, True) # glfw.window_hint(glfw.OPENGL_PROFILE, glfw.OPENGL_CORE_PROFILE) width = img.shape[1] height = img.shape[0] window = glfw.create_window(width, height, 'Lena', None, None) glfw.make_context_current(window) print('Vendor :', glGetString(GL_VENDOR)) print('GPU :', glGetString(GL_RENDERER)) print('OpenGL version :', glGetString(GL_VERSION)) while not glfw.window_should_close(window): glClearColor(0, 0, 0, 1) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glDrawPixels(width, height, GL_RGB, GL_UNSIGNED_BYTE, img_gl) glfw.swap_buffers(window) glfw.poll_events() glfw.destroy_window(window) glfw.terminate() Texture import cv2 from OpenGL.GL import * import glfw if __name__ == '__main__': img = cv2.imread('lena.png', 1) img_gl = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) glfw.init() # These parameters need to be changed according to your environment. # Mac: https://support.apple.com/ja-jp/HT202823 # glfw.window_hint(glfw.CONTEXT_VERSION_MAJOR, 4) # glfw.window_hint(glfw.CONTEXT_VERSION_MINOR, 1) # glfw.window_hint(glfw.OPENGL_FORWARD_COMPAT, True) # glfw.window_hint(glfw.OPENGL_PROFILE, glfw.OPENGL_CORE_PROFILE) window = glfw.create_window(256, 256, 'Lena', None, None) glfw.make_context_current(window) print('Vendor :', glGetString(GL_VENDOR)) print('GPU :', glGetString(GL_RENDERER)) print('OpenGL version :', glGetString(GL_VERSION)) height, width = img.shape[:2] glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, img_gl) while not glfw.window_should_close(window): glClearColor(0, 0, 0, 1) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glEnable(GL_TEXTURE_2D) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR) glBegin(GL_QUADS) glTexCoord2d(0.0, 1.0) glVertex3d(-1.0, -1.0, 0.0) glTexCoord2d(1.0, 1.0) glVertex3d(1.0, -1.0, 0.0) glTexCoord2d(1.0, 0.0) glVertex3d(1.0, 1.0, 0.0) glTexCoord2d(0.0, 0.0) glVertex3d(-1.0, 1.0, 0.0) glEnd() glfw.swap_buffers(window) glfw.poll_events() glfw.destroy_window(window) glfw.terminate() OpenGL 4.1 / GLSL PythonでVAOによるGLSLシェーダープログラミング! - CodeLabo Suspected fragment shader problem, No color, OpenGL 4, GLFW 3, GLEW - OpenGL / OpenGL: Basic Coding - Khronos Forums 床井研究室 - 第2回 テクスチャの割り当て Vendor : b'Intel Inc.' GPU : b'Intel Iris OpenGL Engine' OpenGL version : b'4.1 INTEL-14.4.23' import sys from OpenGL.GL import * import glfw import numpy as np import cv2 vertex_shader_text = ''' #version 410 core in vec3 vPosition; out vec2 vTextureCoord; void main(void) { vTextureCoord = vec2((vPosition.x + 1.0) / 2, (vPosition.y + 1.0) / 2); gl_Position = vec4(vPosition, 1.0); } ''' fragment_shader_text = ''' #version 410 core uniform sampler2D vTexture; in vec2 vTextureCoord; out vec4 flagColor; void main(void) { flagColor = texture(vTexture, vTextureCoord).rgba; } ''' def init_context(): print('Initializing context..') glfw.init() glfw.window_hint(glfw.CONTEXT_VERSION_MAJOR, 4) glfw.window_hint(glfw.CONTEXT_VERSION_MINOR, 1) glfw.window_hint(glfw.OPENGL_FORWARD_COMPAT, True) glfw.window_hint(glfw.OPENGL_PROFILE, glfw.OPENGL_CORE_PROFILE) global window window = glfw.create_window(512, 512, __file__, None, None) glfw.make_context_current(window) print('Vendor :', glGetString(GL_VENDOR)) print('GPU :', glGetString(GL_RENDERER)) print('OpenGL version :', glGetString(GL_VERSION)) def init_texture(): print('Initializing texture..') img = cv2.imread('lena.png', 1) img_gl = cv2.cvtColor(cv2.flip(img, 0), cv2.COLOR_BGR2RGB) global width, height height, width = img.shape[:2] global texture texture = glGenTextures(1) glActiveTexture(GL_TEXTURE0) glBindTexture(GL_TEXTURE_2D, texture) glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR) glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR) glPixelStorei(GL_UNPACK_ALIGNMENT, 1) glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, img_gl) def init_shader(): print('Initializing shader..') global vertex_shader vertex_shader = glCreateShader(GL_VERTEX_SHADER) glShaderSource(vertex_shader, vertex_shader_text) glCompileShader(vertex_shader) if not glGetShaderiv(vertex_shader, GL_COMPILE_STATUS): print('Vertex shader is not OK') print(glGetShaderInfoLog(vertex_shader)) sys.exit(1) else: print('Vertex shader is OK') global fragment_shader fragment_shader = glCreateShader(GL_FRAGMENT_SHADER) glShaderSource(fragment_shader, fragment_shader_text) glCompileShader(fragment_shader) if not glGetShaderiv(fragment_shader, GL_COMPILE_STATUS): print('Fragment shader is not OK') print(glGetShaderInfoLog(fragment_shader)) sys.exit(1) else: print('Fragment shader is OK') global program program = glCreateProgram() glAttachShader(program, vertex_shader) glDeleteShader(vertex_shader) glAttachShader(program, fragment_shader) glDeleteShader(fragment_shader) glLinkProgram(program) if not glGetProgramiv(program, GL_LINK_STATUS): print('Shader program is not OK') print(glGetProgramInfoLog(program)) sys.exit(1) else: print('Shader program is OK') def init_vao(): print('Initializing vao..') # anti-clockwise vertices = np.array([ -1.0, -1.0, 0.0, # left bottom 1.0, -1.0, 0.0, # right bottom -1.0, 1.0, 0.0, # left top -1.0, 1.0, 0.0, # left top 1.0, -1.0, 0.0, # right bottom 1.0, 1.0, 0.0, # right top ], dtype=np.float32) global vertex_vbo vertex_vbo = glGenBuffers(1) global vertex_vao vertex_vao = glGenVertexArrays(1) glBindVertexArray(vertex_vao) glEnableVertexAttribArray(0) glBindBuffer(GL_ARRAY_BUFFER, vertex_vbo) glBufferData(GL_ARRAY_BUFFER, vertices.nbytes, vertices, GL_STATIC_DRAW) glVertexAttribPointer(0, 3, GL_FLOAT, False, 0, None) glBindVertexArray(0) def render(): glUseProgram(program) glUniform1i(glGetUniformLocation(program, 'vTexture'), 0) glBindVertexArray(vertex_vao) glDrawArrays(GL_TRIANGLES, 0, 6) glBindVertexArray(0) if __name__ == '__main__': init_context() init_texture() init_shader() init_vao() print('Start rendering..') while not glfw.window_should_close(window): glClearColor(0, 0, 0, 1) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) render() glfw.swap_buffers(window) glfw.poll_events() glfw.destroy_window(window) glfw.terminate() PyOpenGL Documentation PyOpenGL · PyPI glfw · PyPI

2020年3月23日 · aoirint

Fisheye distortion

OpenCV: Camera Calibration and 3D Reconstruction OpenCV: Fisheye camera model 歪みなしカメラ画像の座標変換 - えやみぐさ カメラ座標 $$ P_c = \left( \begin{array}{c} X_c \ Y_c \ Z_c \end{array} \right) $$ $$ x’ = X_c / Z_c \ y’ = Y_c / Z_c \ r^2 = x’^2 + y’^2 \ \theta = {\rm atan}(r) $$ 歪み補正 / Distortion correction $$ \theta_d = \theta ( 1 + k_1 \theta^2 + k_2 \theta^4 + k_3 \theta^6 + k_4 \theta^8 )\ x’’ = \frac{ \theta_d }{r} x’ \ y’’ = \frac{ \theta_d }{r} y' $$ ...

2020年3月21日 · aoirint

OpenCV FullScreen Window

Python - PythonのOpenCVでフルスクリーン表示|teratail import cv2 cv2.namedWindow('screen', cv2.WINDOW_NORMAL) cv2.setProperty('screen', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN) This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem. python-opencvでQt plugin “cocoa"が見つからないというエラー - Qiita 黒画面 import cv2 import numpy as np # Change here WIDTH = 1920 HEIGHT = 1080 # For secondary monitor, LEFT = 0 TOP = 0 screen = np.zeros((HEIGHT, WIDTH), dtype=np.uint8) cv2.namedWindow('screen', cv2.WINDOW_NORMAL) cv2.moveWindow('screen', LEFT, TOP) cv2.setWindowProperty('screen', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN) cv2.imshow('screen', screen) cv2.waitKey(0) For dynamic image size, ...

2020年3月20日 · aoirint

VS2017でOpenCVをビルドする

What Visual Studio 2017でOpenCVをビルドしたい。 Environment Windows 10 Home Visual Studio 2017 CMake 3.9.3 How Download Sources git clone https://github.com/opencv/opencv.git または OpenCV library CMake CMake CMake-GUIを起動、上部のテキストフィールドにソースのパスと出力先パスを入力する。 ソースはgit cloneしてきたならopencvフォルダ、CMakeLists.txtのあるところ。出力先は適当にbuildとか。 Configureを押してVisual Studio 15 2017 Win64を選択、“Finish”。設定が始まる。 終わったら"Generate"。出力先にOpenCV.slnが生成される。 17/11/05追記:“Generate"の前にBUILD_*の設定を変えると出力されるlibが変わる。 Visual Studio OpenCV.slnを開いて、構成をReleaseに変えてCMakeTargets/INSTALLをビルド。 17/11/05追記:_dのつくデバッグ用ライブラリを生成したいならDebug構成でビルドすればよい。 正常に終われば、出力先のinstall\x64\vc15\libにopencv_core330.libなどが出力されている。 VS2017でOpenCVを使う(Win pack) install\x64\vc15\binにPATHを通し、上のページに従ってVSプロジェクトを設定(ライブラリは適宜必要なもの)する。 Reference OpenCV: Installation in Windows

2017年9月24日 · aoirint

VS2017でOpenCVを使う(Win pack)

What Visual Studio 2017でOpenCVを使いたい。 Environment Windows 10 Home Visual Studio 2017 How OpenCVのダウンロード OpenCV library OpenCV libraryのReleasesから最新の"Win pack"をダウンロード。 “Win pack"は自己展開exeになっているので、適当なディレクトリを指定して展開。 VSプロジェクトの設定 新規にプロジェクトを作る場合、Visual C++から空のプロジェクトを作成。 ソリューションエクスプローラからプロジェクトのプロパティを開き、“VC++ディレクトリ"のツリーに移る。 “インクルードディレクトリ”、“ライブラリディレクトリ"を編集し、展開ディレクトリ以下のbuild\includeをそれぞれに追加する。 “リンカー"のツリーに移り、“追加のライブラリディレクトリ"を編集し、展開ディレクトリ以下のbuild\x64\vc14\libを追加する。 “リンカー"のツリーから、“入力"を選択し、“追加の依存ファイル"に必要なライブラリ(.lib)を追加する。Win packにはopencv_world330d.lib(デバッグ)とopencv_world330.lib(リリース)しかないので、構成に対応する方を追加。 PATHの設定 展開ディレクトリ以下のbuild\x64\vc14\binにPATHを通す。 サンプル #include <iostream> #include <opencv2\opencv.hpp> using namespace cv; int main() { Mat mat(400, 400, CV_8UC3, Scalar(255, 128, 0)); imshow("mat", mat); waitKey(0); return 0; } 水色のウインドウが表示されればOK。ウインドウをアクティブにして何かキーを押せば終了する。

2017年9月24日 · aoirint