|
@@ -0,0 +1,385 @@
|
|
|
+from pyueye import ueye
|
|
|
+import numpy as np
|
|
|
+import time
|
|
|
+import cv2
|
|
|
+import os
|
|
|
+from datetime import datetime
|
|
|
+import datetime
|
|
|
+
|
|
|
+
|
|
|
+hCam = ueye.HIDS(0)
|
|
|
+sensor_info = ueye.SENSORINFO()
|
|
|
+camera_info = ueye.CAMINFO()
|
|
|
+pcImageMemory = ueye.c_mem_p()
|
|
|
+MemID = ueye.int()
|
|
|
+#rectAOI = ueye.IS_RECT()
|
|
|
+#rectAOI.s32X = 0
|
|
|
+#rectAOI.s32Y = 216#348 #664
|
|
|
+#rectAOI.s32Width = 1936
|
|
|
+#rectAOI.s32Height = 372 #334
|
|
|
+pitch = ueye.INT()
|
|
|
+nBitsPerPixel = ueye.INT(24) #24: bits per pixel for color mode; take 8 bits per pixel for monochrome
|
|
|
+channels = 3 #3: channels for color mode(RGB); take 1 channel for monochrome
|
|
|
+m_nColorMode = ueye.INT() # Y8/RGB16/RGB24/REG32
|
|
|
+bytes_per_pixel = int(nBitsPerPixel / 8)
|
|
|
+
|
|
|
+dZoomValue = ueye.DOUBLE()
|
|
|
+
|
|
|
+
|
|
|
+fps = ueye.DOUBLE(60) # set you want fps
|
|
|
+Real_FPS =ueye.DOUBLE() # get real fps
|
|
|
+
|
|
|
+exposure_value = ueye.DOUBLE() # set exposure value
|
|
|
+cbSizeOfParam = 8
|
|
|
+
|
|
|
+#total_image = ueye.UINT(40)
|
|
|
+nSizeOfParam = 4
|
|
|
+
|
|
|
+delay_time = ueye.UINT(10000) #ms
|
|
|
+delay_time_nSizeOfParam = 4
|
|
|
+
|
|
|
+BurstSize = ueye.UINT(20)
|
|
|
+
|
|
|
+status_new=0
|
|
|
+status_old=1
|
|
|
+
|
|
|
+print("START")
|
|
|
+
|
|
|
+# Starts the driver and establishes the connection to the camera
|
|
|
+nRet = ueye.is_InitCamera(hCam, None)
|
|
|
+if nRet != ueye.IS_SUCCESS:
|
|
|
+ print("is_InitCamera ERROR")
|
|
|
+
|
|
|
+nRet = ueye.is_SetFrameRate(hCam,fps,Real_FPS)
|
|
|
+if nRet != ueye.IS_SUCCESS:
|
|
|
+ print("is_SetFrameRate ERROR")
|
|
|
+
|
|
|
+nRet = ueye.is_Exposure(hCam,ueye.IS_EXPOSURE_CMD_SET_EXPOSURE,exposure_value,cbSizeOfParam)
|
|
|
+if nRet != ueye.IS_SUCCESS:
|
|
|
+ print("is_Exposure ERROR")
|
|
|
+
|
|
|
+nRet = ueye.is_SetExternalTrigger(hCam, ueye.IS_SET_TRIGGER_HI_LO)
|
|
|
+if nRet != ueye.IS_SUCCESS:
|
|
|
+ print("is_SetExternalTrigger ERROR")
|
|
|
+
|
|
|
+nRet = ueye.is_Trigger(hCam, ueye.IS_TRIGGER_CMD_SET_BURST_SIZE,BurstSize,ueye.sizeof(BurstSize))
|
|
|
+if nRet != ueye.IS_SUCCESS:
|
|
|
+ print("is_Trigger ERROR")
|
|
|
+
|
|
|
+# Reads out the data hard-coded in the non-volatile camera memory and writes it to the data structure that cInfo points to
|
|
|
+nRet = ueye.is_GetCameraInfo(hCam, camera_info)
|
|
|
+if nRet != ueye.IS_SUCCESS:
|
|
|
+ print("is_GetCameraInfo ERROR")
|
|
|
+
|
|
|
+# You can query additional information about the sensor type used in the camera
|
|
|
+nRet = ueye.is_GetSensorInfo(hCam, sensor_info)
|
|
|
+if nRet != ueye.IS_SUCCESS:
|
|
|
+ print("is_GetSensorInfo ERROR")
|
|
|
+'''
|
|
|
+nRet = ueye.is_ResetToDefault(hCam)
|
|
|
+if nRet != ueye.IS_SUCCESS:
|
|
|
+ print("is_ResetToDefault ERROR")
|
|
|
+'''
|
|
|
+# Set display mode to DIB
|
|
|
+nRet = ueye.is_SetDisplayMode(hCam, ueye.IS_SET_DM_DIB)
|
|
|
+
|
|
|
+nRet = ueye.is_SetColorMode(hCam,ueye.IS_CM_BGR8_PACKED)
|
|
|
+if nRet != ueye.IS_SUCCESS:
|
|
|
+ print("is_SetColorMode ERROR")
|
|
|
+# Set the right color mode
|
|
|
+if int.from_bytes(sensor_info.nColorMode.value, byteorder='big') == ueye.IS_COLORMODE_BAYER:
|
|
|
+ # setup the color depth to the current windows setting
|
|
|
+ ueye.is_GetColorDepth(hCam, nBitsPerPixel, m_nColorMode)
|
|
|
+ bytes_per_pixel = int(nBitsPerPixel / 8)
|
|
|
+ print("IS_COLORMODE_BAYER: ", )
|
|
|
+ print("\tm_nColorMode:", m_nColorMode)
|
|
|
+ print("\tnBitsPerPixel:", nBitsPerPixel)
|
|
|
+ print("\tbytes_per_pixel:", bytes_per_pixel)
|
|
|
+
|
|
|
+elif int.from_bytes(sensor_info.nColorMode.value, byteorder='big') == ueye.IS_COLORMODE_CBYCRY:
|
|
|
+ # for color camera models use RGB32 mode
|
|
|
+ m_nColorMode = ueye.IS_CM_BGRA8_PACKED
|
|
|
+ nBitsPerPixel = ueye.INT(32)
|
|
|
+ bytes_per_pixel = int(nBitsPerPixel / 8)
|
|
|
+ print("IS_COLORMODE_CBYCRY: ", )
|
|
|
+ print("\tm_nColorMode: \t\t", m_nColorMode)
|
|
|
+ print("\tnBitsPerPixel: \t\t", nBitsPerPixel)
|
|
|
+ print("\tbytes_per_pixel: \t\t", bytes_per_pixel)
|
|
|
+
|
|
|
+elif int.from_bytes(sensor_info.nColorMode.value, byteorder='big') == ueye.IS_COLORMODE_MONOCHROME:
|
|
|
+ # for color camera models use RGB32 mode
|
|
|
+ m_nColorMode = ueye.IS_CM_MONO8
|
|
|
+ nBitsPerPixel = ueye.INT(8)
|
|
|
+ bytes_per_pixel = int(nBitsPerPixel / 8)
|
|
|
+ print("IS_COLORMODE_MONOCHROME: ", )
|
|
|
+ print("\tm_nColorMode: \t\t", m_nColorMode)
|
|
|
+ print("\tnBitsPerPixel: \t\t", nBitsPerPixel)
|
|
|
+ print("\tbytes_per_pixel: \t\t", bytes_per_pixel)
|
|
|
+else:
|
|
|
+ # for monochrome camera models use Y8 mode
|
|
|
+ m_nColorMode = ueye.IS_CM_MONO8
|
|
|
+ nBitsPerPixel = ueye.INT(8)
|
|
|
+ bytes_per_pixel = int(nBitsPerPixel / 8)
|
|
|
+ print("else")
|
|
|
+'''
|
|
|
+nRet = ueye.is_AOI(hCam, ueye.IS_AOI_IMAGE_SET_AOI, rectAOI, ueye.sizeof(rectAOI))
|
|
|
+if nRet != ueye.IS_SUCCESS:
|
|
|
+ print("is_AOI ERROR")
|
|
|
+'''
|
|
|
+# Can be used to set the size and position of an "area of interest"(AOI) within an image
|
|
|
+nRet = ueye.is_AOI(hCam, ueye.IS_AOI_IMAGE_GET_AOI, rectAOI, ueye.sizeof(rectAOI))
|
|
|
+if nRet != ueye.IS_SUCCESS:
|
|
|
+ print("is_AOI ERROR")
|
|
|
+
|
|
|
+width = rectAOI.s32Width
|
|
|
+height = rectAOI.s32Height
|
|
|
+
|
|
|
+# Prints out some information about the camera and the sensor
|
|
|
+
|
|
|
+print("Exposure value : {}".format(exposure_value))
|
|
|
+print("Maximum image width:", width)
|
|
|
+print("Maximum image height:", height)
|
|
|
+# ---------------------------------------------------------------------------------------------------------------------------------------
|
|
|
+
|
|
|
+# Allocates an image memory for an image having its dimensions defined by width and height and its color depth defined by nBitsPerPixel
|
|
|
+nRet = ueye.is_AllocImageMem(hCam, width, height, nBitsPerPixel, pcImageMemory, MemID)
|
|
|
+if nRet != ueye.IS_SUCCESS:
|
|
|
+ print("is_AllocImageMem ERROR")
|
|
|
+else:
|
|
|
+ # Makes the specified image memory the active memory
|
|
|
+ nRet = ueye.is_SetImageMem(hCam, pcImageMemory, MemID)
|
|
|
+ if nRet != ueye.IS_SUCCESS:
|
|
|
+ print("is_SetImageMem ERROR")
|
|
|
+ else:
|
|
|
+ # Set the desired color mode
|
|
|
+ nRet = ueye.is_SetColorMode(hCam, m_nColorMode)
|
|
|
+
|
|
|
+# Activates the camera's live video mode (free run mode)
|
|
|
+nRet = ueye.is_CaptureVideo(hCam, ueye.IS_DONT_WAIT)
|
|
|
+if nRet != ueye.IS_SUCCESS:
|
|
|
+ print("is_CaptureVideo ERROR")
|
|
|
+
|
|
|
+# Enables the queue mode for existing image memory sequences
|
|
|
+nRet = ueye.is_InquireImageMem(hCam, pcImageMemory, MemID, width, height, nBitsPerPixel, pitch)
|
|
|
+if nRet != ueye.IS_SUCCESS:
|
|
|
+ print("is_InquireImageMem ERROR")
|
|
|
+else:
|
|
|
+ print("Press q to leave the programm")
|
|
|
+# ---------------------------------------------------------------------------------------------------------------------------------------
|
|
|
+i = 0
|
|
|
+f = 0
|
|
|
+
|
|
|
+# Continuous image display
|
|
|
+while True:
|
|
|
+ point_color = (255,255,255)#BGR
|
|
|
+ # In order to display the image in an OpenCV window we need to...
|
|
|
+ # ...extract the data of our image memory
|
|
|
+ array = ueye.get_data(pcImageMemory, width, height, nBitsPerPixel, pitch, copy=False)
|
|
|
+ # bytes_per_pixel = int(nBitsPerPixel / 8)
|
|
|
+ # ...reshape it in an numpy array...
|
|
|
+ frame = np.reshape(array, (height.value, width.value, bytes_per_pixel))
|
|
|
+ #print(frame.shape)
|
|
|
+ #cv2.rectangle(frame, (1072, 92), (1213, 226), point_color, 1)
|
|
|
+ roi5 = frame[527:601, 1247:1330]
|
|
|
+ cv2.imshow('roi5', roi5)
|
|
|
+ print("roi1 Height&width:", str(roi5.shape))
|
|
|
+ w = roi5.shape[0]
|
|
|
+ h = roi5.shape[1]
|
|
|
+ x = 0
|
|
|
+ y = 0
|
|
|
+ i = 0
|
|
|
+
|
|
|
+ while True:
|
|
|
+ i = i + 1
|
|
|
+ (b, g, r,a) = roi5[x, y] # 读取(0,0)像素,Python中图像像素是按B,G,R顺序存储的
|
|
|
+
|
|
|
+ print(i,"當前位置像素 -- 红:%d,绿:%d,蓝:%d" % (r, g, b)) # 显示像素值
|
|
|
+ # print(r)
|
|
|
+
|
|
|
+ # print(x, y)
|
|
|
+ x = x + 1
|
|
|
+ if x == w:
|
|
|
+ y = y + 1
|
|
|
+ x = 0
|
|
|
+ if y == h:
|
|
|
+ break
|
|
|
+ #roi1 = frame[92:226, 1072:1213]
|
|
|
+ #cv2.imshow('roi1', roi1)
|
|
|
+ #cv2.rectangle(frame, (347, 234), (497, 363), point_color, 1)
|
|
|
+ #roi2 = frame[234:363, 347:497]
|
|
|
+ #cv2.imshow('roi2', roi2)
|
|
|
+ #cv2.rectangle(frame, (835, 216), (1011, 362), point_color, 1)
|
|
|
+ #roi3 = frame[216:362, 835:1011]
|
|
|
+ #cv2.imshow('roi3', roi3)
|
|
|
+ #cv2.rectangle(frame, (1311, 205), (1438, 356), point_color, 1)
|
|
|
+ #roi4 = frame[205:356, 1311:1438]
|
|
|
+ #cv2.imshow('roi4', roi4)
|
|
|
+ #cv2.imshow("SimpleLive_Python_uEye_OpenCV", frame)
|
|
|
+ trigger_status = ueye.is_SetExternalTrigger(hCam,ueye.IS_GET_TRIGGER_STATUS)
|
|
|
+ status_new = trigger_status
|
|
|
+ print(status_old, status_new)
|
|
|
+ # start = datetime.datetime.now()
|
|
|
+ if status_old == 1 and status_new == 0:
|
|
|
+ start = datetime.datetime.now()
|
|
|
+ '''
|
|
|
+ cv2.imwrite('C:\\Users\\User\\Desktop\\IDS\\test1.png', roi1)
|
|
|
+ image1 = cv2.imread("C:\\Users\\User\\Desktop\\IDS\\test1.png") # 读取图像
|
|
|
+ cv2.imwrite('C:\\Users\\User\\Desktop\\IDS\\test2.png', roi2)
|
|
|
+ image2 = cv2.imread("C:\\Users\\User\\Desktop\\IDS\\test2.png")
|
|
|
+ cv2.imwrite('C:\\Users\\User\\Desktop\\IDS\\test3.png', roi3)
|
|
|
+ image3 = cv2.imread("C:\\Users\\User\\Desktop\\IDS\\test3.png")
|
|
|
+ cv2.imwrite('C:\\Users\\User\\Desktop\\IDS\\test4.png', roi4)
|
|
|
+ image4 = cv2.imread("C:\\Users\\User\\Desktop\\IDS\\test4.png")
|
|
|
+
|
|
|
+ (B1, G1, R1) = cv2.split(image1) # 提取R、G、B分量
|
|
|
+ (B2, G2, R2) = cv2.split(image2)
|
|
|
+ (B3, G3, R3) = cv2.split(image3)
|
|
|
+ (B4, G4, R4) = cv2.split(image4)
|
|
|
+ print("image1 Height&width:", str(image1.shape))
|
|
|
+ print("image2 Height&width:", str(image2.shape))
|
|
|
+ print("image3 Height&width:", str(image3.shape))
|
|
|
+ print("image4 Height&width:", str(image4.shape))
|
|
|
+ w1 = image1.shape[0]
|
|
|
+ h1 = image1.shape[1]
|
|
|
+ x1 = 0
|
|
|
+ y1 = 0
|
|
|
+ i1 = 0
|
|
|
+
|
|
|
+ while True:
|
|
|
+ i1 = i1 + 1
|
|
|
+ (b, g, r) = image1[x1, y1] # 读取(0,0)像素,Python中图像像素是按B,G,R顺序存储的
|
|
|
+
|
|
|
+ #print(i,"當前位置像素 -- 红:%d,绿:%d,蓝:%d" % (r, g, b)) # 显示像素值
|
|
|
+ #print(r)
|
|
|
+
|
|
|
+ # print(x, y)
|
|
|
+ x1 = x1 + 1
|
|
|
+ if x1 == w1:
|
|
|
+ y1 = y1 + 1
|
|
|
+ x1 = 0
|
|
|
+ if y1 == h1:
|
|
|
+ break
|
|
|
+ w2 = image2.shape[0]
|
|
|
+ h2 = image2.shape[1]
|
|
|
+ x2 = 0
|
|
|
+ y2 = 0
|
|
|
+ i2 = 0
|
|
|
+
|
|
|
+ while True:
|
|
|
+ i2 = i2 + 1
|
|
|
+ (b, g, r) = image2[x2, y2] # 读取(0,0)像素,Python中图像像素是按B,G,R顺序存储的
|
|
|
+
|
|
|
+ # print(i,"當前位置像素 -- 红:%d,绿:%d,蓝:%d" % (r, g, b)) # 显示像素值
|
|
|
+ # print(r)
|
|
|
+
|
|
|
+ # print(x, y)
|
|
|
+ x2 = x2 + 1
|
|
|
+ if x2 == w2:
|
|
|
+ y2 = y2 + 1
|
|
|
+ x2 = 0
|
|
|
+ if y2 == h2:
|
|
|
+ break
|
|
|
+ w3 = image3.shape[0]
|
|
|
+ h3 = image3.shape[1]
|
|
|
+ x3 = 0
|
|
|
+ y3 = 0
|
|
|
+ i3 = 0
|
|
|
+
|
|
|
+ while True:
|
|
|
+ i3 = i3 + 1
|
|
|
+ (b, g, r) = image3[x3, y3] # 读取(0,0)像素,Python中图像像素是按B,G,R顺序存储的
|
|
|
+
|
|
|
+ # print(i,"當前位置像素 -- 红:%d,绿:%d,蓝:%d" % (r, g, b)) # 显示像素值
|
|
|
+ # print(r)
|
|
|
+
|
|
|
+ # print(x, y)
|
|
|
+ x3 = x3 + 1
|
|
|
+ if x3 == w3:
|
|
|
+ y3 = y3 + 1
|
|
|
+ x3 = 0
|
|
|
+ if y3 == h3:
|
|
|
+ break
|
|
|
+ w4 = image4.shape[0]
|
|
|
+ h4 = image4.shape[1]
|
|
|
+ x4 = 0
|
|
|
+ y4 = 0
|
|
|
+ i4 = 0
|
|
|
+
|
|
|
+ while True:
|
|
|
+ i4 = i4 + 1
|
|
|
+ (b, g, r) = image4[x4, y4] # 读取(0,0)像素,Python中图像像素是按B,G,R顺序存储的
|
|
|
+
|
|
|
+ # print(i,"當前位置像素 -- 红:%d,绿:%d,蓝:%d" % (r, g, b)) # 显示像素值
|
|
|
+ # print(r)
|
|
|
+
|
|
|
+ # print(x, y)
|
|
|
+ x4 = x4 + 1
|
|
|
+ if x4 == w4:
|
|
|
+ y4 = y4 + 1
|
|
|
+ x4 = 0
|
|
|
+ if y4 == h4:
|
|
|
+ break
|
|
|
+ '''
|
|
|
+ end = datetime.datetime.now()
|
|
|
+ print("執行時間:", end - start)
|
|
|
+ '''
|
|
|
+ for i in range(25):
|
|
|
+ array = ueye.get_data(pcImageMemory, width, height, nBitsPerPixel, pitch, copy=False)
|
|
|
+ global frame1
|
|
|
+ frame1 = np.reshape(array, (height.value, width.value, bytes_per_pixel))
|
|
|
+ for i in range(25):
|
|
|
+ f = f+1
|
|
|
+ FileParams = ueye.IMAGE_FILE_PARAMS()
|
|
|
+ FileParams.pwchFileName = "C:/Users/User/Desktop/IDS/p/get_bean3/" + str(f) + ".png"
|
|
|
+ FileParams.nFileType = ueye.IS_IMG_PNG
|
|
|
+ FileParams.ppcImageMem = None
|
|
|
+ FileParams.pnImageID = None
|
|
|
+ FileParams.nQuality = 75
|
|
|
+ nRet = ueye.is_ImageFile(hCam, ueye.IS_IMAGE_FILE_CMD_SAVE, FileParams, ueye.sizeof(FileParams))
|
|
|
+ print('take photo')
|
|
|
+ '''
|
|
|
+ '''
|
|
|
+ start1 = datetime.datetime.now()
|
|
|
+
|
|
|
+ array = ueye.get_data(pcImageMemory, width, height, nBitsPerPixel, pitch, copy=False)
|
|
|
+ global frame1
|
|
|
+ frame1= np.reshape(array, (height.value, width.value, bytes_per_pixel))
|
|
|
+ i = i+1
|
|
|
+ FileParams = ueye.IMAGE_FILE_PARAMS()
|
|
|
+ FileParams.pwchFileName = "C:/Users/User/Desktop/IDS/p/20210304-1/" + str(i)+ ".png"
|
|
|
+ FileParams.nFileType = ueye.IS_IMG_PNG
|
|
|
+ FileParams.ppcImageMem = None
|
|
|
+ FileParams.pnImageID = None
|
|
|
+ FileParams.nQuality = 10
|
|
|
+ nRet = ueye.is_ImageFile(hCam, ueye.IS_IMAGE_FILE_CMD_SAVE, FileParams, ueye.sizeof(FileParams))
|
|
|
+ print('take photo')
|
|
|
+ end = datetime.datetime.now()
|
|
|
+ print("執行時間:", end - start)
|
|
|
+ end1 = datetime.datetime.now()
|
|
|
+ print("執行時間:", end1 - start1)
|
|
|
+ if f == 1000:
|
|
|
+ break
|
|
|
+ status_old = status_new
|
|
|
+ '''
|
|
|
+
|
|
|
+ # ...resize the image by a half #frame後面的(800,600)可以自行調整成想要的大小
|
|
|
+ #frame = cv2.resize(frame, (800, 600), fx=0.5, fy=0.5)
|
|
|
+ #nRet = ueye.is_IO(hCam, ueye.IS_IO_CMD_GPIOS_GET_CONFIGURATION, gpio, ueye.sizeof(gpio))
|
|
|
+
|
|
|
+ #cv2.imshow("SimpleLive_Python_uEye_OpenCV", frame)
|
|
|
+
|
|
|
+ # Press q if you want to end the loop
|
|
|
+ if cv2.waitKey(1) & 0xFF == ord('q'):
|
|
|
+ break
|
|
|
+
|
|
|
+# ---------------------------------------------------------------------------------------------------------------------------------------
|
|
|
+
|
|
|
+# Releases an image memory that was allocated using is_AllocImageMem() and removes it from the driver management
|
|
|
+ueye.is_FreeImageMem(hCam, pcImageMemory, MemID)
|
|
|
+
|
|
|
+
|
|
|
+# Disables the hCam camera handle and releases the data structures and memory areas taken up by the uEye camera
|
|
|
+ueye.is_ExitCamera(hCam)
|
|
|
+
|
|
|
+# Destroys the OpenCv windows
|
|
|
+cv2.destroyAllWindows()
|