Trouble/Vision 12

Open3D rendering 시 이미지 중심/principal point 안 맞는 문제

Open3D의 visualizer를 활용해서 렌더링을 하고자 할 때 겪는 대표적 문제가 intrinsic parameter가 맘대로 설정이 안된다는 점이다. 이전 글의 말미에서 적어두긴 했지만 또 다른 원인이 있기도 하고 더 정확히 하기 위해 기록을 해둔다.  1. Open3D는 Visualizer 윈도우 크기의 영향을 받는다.  - 정확한 원인까지는 모르겠다. - Open3D visualizer를 이용해서 capture_screen_float_buffer 혹은 capture_depth_float_buffer로 렌더링을 한다고 했을 때, visualizer를 띄워두는 윈도우가 생각보다 중요하다. - 윈도우의 사이즈가 기본값이 1920x1080으로 설정되어 있는데, 이보다 높이고자 할 때 제대로 렌더링이 ..

Trouble/Vision 2024.11.05

pymeshlab decimation 안되는 버그

데이터 처리하다가 우연히 발견한 버그인데, pymeshlab의 decimation 기능이 제대로 동작 안할 때가 있다. import pymeshlab as mlms = ml.MeshSet()ms.load_new_mesh(ply_path)m = ms.current_mesh()num_verts = m.vertex_number()num_faces = m.face_number()simp_ratio = 0.1ms.meshing_decimation_quadric_edge_collapse_with_texture(targetperc=simp_ratio)ms.save_current_mesh(obj_path, save_textures=True, save_vertex_normal=False) 뭐 이런 식으로 pymeshla..

Trouble/Vision 2024.09.11

Trimesh load_mesh, export 시 texture 제대로 안 읽히고 저장 안될 때

Trimesh를 이용해 obj 파일을 읽고, 편집 후 다시 export하는 과정에서 texture가 제대로 읽히고 저장되지 않는 문제가 있다. obj file을 열어보면 vt 값도 제대로 있고 mtllib 또한 제대로 적혀있는데 texture가 안 읽어지거나 export 했을 때 texture map이 2x2 크기로 아무 쓰레기 값이 저장되는 상황이다.  mesh.export(..., file_type="obj", include_texture=True) 와 같이 argument를 True로 추가해도 해결되지 않는다.  Meshlab에 띄워보면 제대로 텍스처가 보이지만, trimesh로 볼 때만 안 나온다. 원인이건 obj 파일 내부에 usemtl가 안 적혀있어서 그렇다!  trimesh가 texture ..

Trouble/Vision 2024.09.02

Open3d mesh wrong vertex count, face order (Open3d mesh 제멋대로 읽혀질 때)

open3d로 mesh를 읽으면 가끔 vertex 개수가 잘못되어 있거나, face를 구성하는 vertex index가 다른 것을 볼 수 있다. 보통 후자는 앞의 vertex 개수가 바뀌면서 꼬인 것으로 연쇄적인 현상이다.  이유를 찾아보니 정말 버그였는데, read_triangle_mesh를 사용할 때 내부적으로 enable_post_processing=False가 동작을 안하도록 하드 코딩되어 있어서 파일을 자체적으로 한 번 수정하기 때문이었다.  (enable_post_processing=True로 하면 또 다르게 바뀌는 걸로 봐서 단순히 True/False 전환 문제라기 보다 어딘가에 하드코딩된게 있나보다. open3d를 직접 고칠 수는 없으니 기다리는 수 밖에) https://github.com..

Trouble/Vision 2024.08.07

Open3D OBJ texture 안 보일 때, enable_post_processing=True로 해결 안 될 때, texture가 검정색으로 뜰 때 확인 사항

Open3d 에서 OBJ를 확인할 때 가장 번거로운 문제가 texture가 제멋대로 처리될 때다. 대표적으로 아래 그림처럼 texture가 있음에도 검정색으로 뜬다거나, 회색으로 뜨는 상황이 있다.   검색해보면 o3d.io.read_triangle_mesh(..., enable_post_processing=True)로 설정하면 해결된다고 하는데, 이렇게 해결되지 않는게 진짜 머리 터진다. 원인이야 많이 있겠지만, 내 경험 상 이런 경우 문제는 크게 4가지로 나뉘는 것 같다. 매번 까먹고 다시 구르는게 억울해서 메모 해둔다.  *enable_post_processing=True 무지성으로 쓰지 말자.홈페이지 보면 위와 같은 작업을 수행한다고 하는데, 저 첫 줄의 triangulate meshes with..

Trouble/Vision 2024.07.09

Opencv cornerSubPix empty array 문제

cv2.error: OpenCV(4.7.0) /io/opencv/modules/imgproc/src/cornersubpix.cpp:58: error: (-215:Assertion failed) count >= 0 in function 'cornerSubPix' 2D feature point 위치를 보정하기 위해서 주로 쓰는 cv2.cornerSubPix() 함수 사용 중 위 오류를 자주 볼 수 있다. 오류명만 보면 입력으로 들어가는 2d point가 empty array라는 뜻으로 보이는데, 그 경우가 아니어도 위 오류가 날 수 있다. # points : np.float64 cv2.cornerSubPix(gray, points, (5, 5), (-1, -1), subpix_criteria) # fail ..

Trouble/Vision 2024.02.27

Python OpenCV solvePnP 이유 모를 type error

OpenCV solvePnP 함수는 자세 초기화할 때 자주 쓰는 함수로 매우 익숙하다. 주요 주의사항으로는 입력값 3d point (object point), 2d point (image point), mtx(intrinsic matrix), distortion coefficient 들이 float이나 double 형을 유지해야 한다는 점이다. (float, double 섞여도 되지만 권장하진 않음.) python이라면 np.float32이나 np.float64로 통일해서 사용해야 한다. 그렇지 않으면 다음 에러를 만날 수 있다. cv2.error: OpenCV(4.7.0) /io/opencv/modules/calib3d/src/solvepnp.cpp:838: error: (-215:Assertion f..

Trouble/Vision 2024.02.22

C++ OpenCV cvtColor memory leakage 문제

C++로 코드를 구현하던 중 갑자기 다음와 같은 오류가 났다. terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc Aborted (core dumped) 보통 힙 메모리 부족할 때 발생하는 오류인데, 딱히 동적 할당을 무한히 반복하거나 객체 생성을 무한히 하는 것도 아닌데 갑자기 메모리 부족하다고 떴다. 메모리 사용이 폭발적으로 증가하는 병목 지점을 찾아보니 cv::cvtColor() 호출 지점이었다. cv::Mat cvimg = cv::imread(img_path); cv::Mat cvimg_gray; cv::cvtColor(cvimg, cvimg_gray, cv::COLOR_BGR2GRAY); //..

Trouble/Vision 2024.02.05

import cv2 시 'numpy._DTypeMeta' object is not subscriptable 오류

pip install opencv-python으로 cv2 설치하는 것은 아주 간단한데, 설치하고 나서 다음 오류가 떴다. Traceback (most recent call last): File "/home/jseob/Desktop/yjs/codes/3DDFA_V2/demo.py", line 7, in import cv2 File "/home/jseob/anaconda3/envs/face/lib/python3.9/site-packages/cv2/__init__.py", line 181, in bootstrap() File "/home/jseob/anaconda3/envs/face/lib/python3.9/site-packages/cv2/__init__.py", line 175, in bootstrap if..

Trouble/Vision 2023.09.04

이미지가 일부가 깨져 열리지 않는 문제 : image file is truncated

이미지 파일이 잘 존재하고 뷰어로는 잘 열리는 상황에서도 opencv cv2.imread로 이미지가 읽히지 않는 현상이 있다. 결론부터 말하면 이미지 파일이 손상되어있는 것이 원인인데 뷰어에서는 열리므로 약간 손상되어있는 것이다. 자세히 보면 아래 사진처럼 뷰어에서 일부가 회색으로 보일 것이다. 이미지가 실제로 (128, 128, 128)을 갖는 것이 아니라 pixel에 값이 존재 하지 않는 것이다. 문제 상황 check0 = os.path.exists(img_path) # True check1 = os.path.isfile(img_path) # True cvimg = cv2.imread(img_path) # None pilimg = Image.open(img_path) # image file is tr..

Trouble/Vision 2023.08.25