좋은 아침, 나는 현재 표면에 레이저 시트를 보내고 그것의 반사를 수집하여 실시간으로 액체 표면 변형을 연구하기 위해 노력하고있어파이썬/OpenCV의 : 카메라 영상의 흐름 레이저 곡선 분석
. 내가 얻는 것은 일반적으로 각 타임 스텝에서 밝은 곡선이며 좌표를 분석하고 싶습니다.
저는 파이썬 스크립트를 작성했습니다. 바로 아래에 표시되어 있습니다 (분석 부분은 laser curved line detection using opencv and python에서 다시 찍었습니다. 비디오로 작업한다는 것을 제외하고는 거의 정확하게 수행하려고합니다. 흐름) :
import cv2
from PIL import Image
import cv2.cv as cv
import numpy as np
import time
myfile = open("hauteur.txt","w")
#Import camera flow
class Target:
def __init__(self):
self.capture = cv.CaptureFromCAM(0)
cv.namedWindow("Target", 1)
cv.SetCaptureProperty(self.capture,cv.CV_CAP_PROP_FRAME_WIDTH, 150)
cv.SetCaptureProperty(self.capture,cv.CV_CAP_PROP_FRAME_HEIGHT, 980)
cv.SetCaptureProperty(self.capture,cv.CV_CAP_PROP_FPS, 60)
def run(self):
frame = cv.QueryFrame(self.capture)
frame_size = cv.GetSize(frame)
color_image_cv = cv.CreateImage(cv.GetSize(frame), 8, 3)
color_image = np.array(color_image_cv)
grey_image = cv.CreateImage(cv.GetSize(frame), cv.IPL_DEPTH_8U, 1)
first = True
t = time.clock()
# Frame analysis
while True:
ret, bw = cv2.threshold(color_image, 0, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(bw, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
curves = np.zeros((img.shape[0], img.shape[1], 3), np.uint8)
for i in range(len(contours)):
for col in range(draw.shape[1]):
M = cv2.moments(draw[:, col])
if M['m00'] != 0:
x = col
y = int (M['m01']/M['m00'])
curves[y, x, :] = (0, 0, 255)
res = {'X' : x, 'Y' : y, 't' : t}
print res
myfile.write('{X}\t{Y}\t{t}'.format(**res))
myfile.write("\n")
cv2.ShowImage("Target", color_image)
# Listen for ESC key
c = cv2.WaitKey(7) % 0x100
if c == 27:
break
if __name__=="__main__":
t = Target()
t.run()
그러나 동일한 코드 내 이력서 및 CV2 기능의 사용은 좋은 혼란을 가져올 것으로 보인다 나는 오류를 얻을 줄에서
src data type = 17 is not supported
ret, bw = cv2.threshold(color_image, 0, 255, cv2.THRESH_BINARY)
이것은 cv 및 cv2 함수가 이미지를 만들고 저장하는 방식에서 발생하는 것으로 알고 있지만 시도한 변환 프로세스가 작동하지 않는 것 같으며 가져 오는 비디오 흐름에 삽입 할 동등한 cv2 함수를 찾지 못했습니다. (하지만, 당신이 이해할 수 있듯이, 나는 프로그래밍 프로가 아니므로 문서에서 필요한 것을 건너 뛸 수도 있습니다.) 이러한 cv 및 cv2 함수를 조정하거나 cv2 함수를 사용하여 동등한 카메라 흐름을 얻는 방법이 있습니까?
보너스 질문 :이 스크립트가 얼마나 빨리 실행될 수 있습니까? (결국이 스크립트가 300-400fps로 실행되어야한다고 생각해도 이것이 실제로 실현 가능한지조차 모르겠다)?
cv2 인터페이스를 고수 할 수 있습니까? cv2.cv는 향후 제공되지 않을 예정이며 앞으로 제공 될 opencv3.0에서는 제공되지 않을 예정입니다. cv2는 이미지에 대해 numpy 배열을 사용하므로이를 준수해야합니다. – berak
그게 내가하려는 일이지, 지금은 성공하지 못했다.하지만 내 카메라 흐름을 가져 오는 더 효율적인 방법을 모색 할 것이다. – Takeshin