내쪽에는 Pleora의 EBUS SDK를 사용하여 카메라의 프레임을 읽으려면 C++을 사용하고 있습니다. 버퍼를 이미지로 변환하기 전에이 스트림을 처음 수신 할 때 각 픽셀에 대해 몇 가지 계산을 수행하기 위해 한 번에 16 비트 스트림을 읽을 수 있습니다. 즉, 각 픽셀에 대해 16 비트 덩어리의 데이터가 있습니다. .이미지를 바이너리 스트림으로 변환
이제 두 번째 절반은 장고 웹 앱으로 ffmpeg, nginx, hls 스트림을 통해이 비디오 출력을 제공합니다. 사용자가 비디오를 클릭하면 현재 프레임과 클릭 좌표를 가져 와서 C++ 부분에서 위와 같은 계산을 수행 할 수 있기를 원합니다.
지금 당장 프레임을 캡처하기 위해 html5 캔버스를 사용하고 프레임을 base64 인코딩 이미지로 변환하기 위해 canvas.toDataURL()
을 사용합니다. 다음을 통해 base64 이미지, 좌표 및 프레임 크기를 파이썬으로 전달합니다. AJAX.
파이썬에서 픽셀 당 16 비트를 얻는 방법으로이 base64 인코딩 된 이미지를 조작하려고합니다. 순간 나는 다음을 수행하십시오 b64decoded_frame
는 다음 이미지의 픽셀이 있으며 정수 값이 예상만큼 높지 않다에서
pos = json.loads(request.GET['pos'])
str_frame = json.loads(request.GET['frame'])
dimensions = json.loads(request.GET['dimensions'])
pixel_index = (dimensions['width'] * pos['y']) + pos['x'] + 1
b64decoded_frame = base64.b64decode(str_frame.encode('utf-8'))
그러나, 훨씬 적은 인덱스가 있습니다. 확인한 후 png로 저장할 수 있으므로 이미지가 손상되지 않습니다.
요약하면, 각 픽셀을 16 비트로 나타내는 직렬화 된 이진 스트림으로 base64 이미지를 변환하려면 어떻게해야합니까?
UPDATE
은 내가
그리고 좀 더 연구 후에 내가 할 노력하고있어 그것의 mono16 값을 얻을 생각 python3.2
를 사용하고 있음을 언급하는 것을 잊었다 지정된 픽셀. 나는 그것이 내가 원하는 것인지는 확실하지 않다. 그러나 누구라도 이미지를 모노 16이나 픽셀 16으로 변환하는 방법을 설명 할 수 있다면 그것을 탐색 할 수 있었고 그것이 사실 해결책인지 알 수 있었다.
왜 'b64decode'전에 'utf-8'로 인코딩합니까? – goncalopp
아, 미안하지만, python3을 사용하고 있다는 것을 잊어 버렸습니다. 그렇게하지 않으면 "예상 바이트가 아닌 str"이라는 유형 오류가 발생합니다. utf-8로 인코딩하면 바이트 객체임을 보장합니다. – Rick