Verfälschte Bilder danach mit openCV nach stundenlanger Verwendung
Posted: 20 Feb 2025, 12:06
Ich benutze ein Dinolite -Mikroskop, um Teile zu steuern. Aber nach stundenlangem Gebrauch wird das Bild beschädigt. Ich verwende Pyside6 mit offenem Lebenslauf
Sie finden das Bild und meinen Code hier. Die Bilder sind in Farbe, aber für den Versuch korrigiere ich die Helligkeit nicht. JPG " /> < /p>
[img]0, parent=None):
self.src = src
self.isRunning = True
self.camera = None
self.round = 1
self.datas = [0,0,0,0,0,0,0,0,0]
def run(self) :
self.camera = cv2.VideoCapture(int(self.src), cv2.CAP_DSHOW)
while self.isRunning:
ret, frame = self.camera.read()
if ret :
rgbImage = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
h, w, ch = rgbImage.shape
bytesPerLine = ch * w
convertToQtFormat = QImage(rgbImage.data, w, h, bytesPerLine, QImage.Format_RGB888)
p = convertToQtFormat.scaled(640, 480, Qt.KeepAspectRatio)
if self.round == 1 :
self.datas[0] = self.camera.get(cv2.CAP_PROP_FRAME_HEIGHT)
self.datas[1] = self.camera.get(cv2.CAP_PROP_FRAME_WIDTH)
self.datas[2] = self.camera.get(cv2.CAP_PROP_EXPOSURE)
self.datas[3] = self.camera.get(cv2.CAP_PROP_BRIGHTNESS)
self.datas[4] = self.camera.get(cv2.CAP_PROP_CONTRAST)
self.datas[5] = self.camera.get(cv2.CAP_PROP_SATURATION)
self.datas[6] = self.camera.get(cv2.CAP_PROP_HUE)
self.datas[7] = self.camera.get(cv2.CAP_PROP_GAIN)
self.datas[8] = self.camera.get(cv2.CAP_PROP_SHARPNESS)
self.round+=1
self.image.emit([p, self.datas, frame])
def stop(self):
self.isRunning=False
def close(self) :
self.stop()
self.quit()
self.terminate()
def resolution(self, x, y) :
self.stop()
self.camera.set(cv2.CAP_PROP_FRAME_WIDTH, int(x))
self.camera.set(cv2.CAP_PROP_FRAME_HEIGHT, int(y))
self.round = 1
self.isRunning = True
#self.run()
def properties(self) :
self.stop()
self.camera.set(cv2.CAP_PROP_SETTINGS, 1)
self.isRunning = True
#self.run()
def parameters(self, datas) :
self.stop()
self.camera.get(cv2.CAP_PROP_FRAME_HEIGHT, datas[0])
self.camera.get(cv2.CAP_PROP_FRAME_WIDTH, datas[1])
self.camera.get(cv2.CAP_PROP_EXPOSURE, datas[2])
self.camera.get(cv2.CAP_PROP_BRIGHTNESS, datas[3])
self.camera.get(cv2.CAP_PROP_CONTRAST, datas[4])
self.camera.get(cv2.CAP_PROP_SATURATION, datas[5])
self.camera.get(cv2.CAP_PROP_HUE, datas[6])
self.camera.get(cv2.CAP_PROP_GAIN, datas[7])
self.camera.get(cv2.CAP_PROP_SHARPNESS, datas[8])
self.round = 1
self.isRunning = True
def read_parameters(self) :
self.datas[0] = self.camera.get(cv2.CAP_PROP_FRAME_HEIGHT)
self.datas[1] = self.camera.get(cv2.CAP_PROP_FRAME_WIDTH)
self.datas[2] = self.camera.get(cv2.CAP_PROP_EXPOSURE)
self.datas[3] = self.camera.get(cv2.CAP_PROP_BRIGHTNESS)
self.datas[4] = self.camera.get(cv2.CAP_PROP_CONTRAST)
self.datas[5] = self.camera.get(cv2.CAP_PROP_SATURATION)
self.datas[6] = self.camera.get(cv2.CAP_PROP_HUE)
self.datas[7] = self.camera.get(cv2.CAP_PROP_GAIN)
self.datas[8] = self.camera.get(cv2.CAP_PROP_SHARPNESS)
< /code>
Der Steckplatz: < /p>
Ich finde diesen Fehlerursprung nicht.
Sie finden das Bild und meinen Code hier. Die Bilder sind in Farbe, aber für den Versuch korrigiere ich die Helligkeit nicht. JPG " /> < /p>
[img]0, parent=None):
self.src = src
self.isRunning = True
self.camera = None
self.round = 1
self.datas = [0,0,0,0,0,0,0,0,0]
def run(self) :
self.camera = cv2.VideoCapture(int(self.src), cv2.CAP_DSHOW)
while self.isRunning:
ret, frame = self.camera.read()
if ret :
rgbImage = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
h, w, ch = rgbImage.shape
bytesPerLine = ch * w
convertToQtFormat = QImage(rgbImage.data, w, h, bytesPerLine, QImage.Format_RGB888)
p = convertToQtFormat.scaled(640, 480, Qt.KeepAspectRatio)
if self.round == 1 :
self.datas[0] = self.camera.get(cv2.CAP_PROP_FRAME_HEIGHT)
self.datas[1] = self.camera.get(cv2.CAP_PROP_FRAME_WIDTH)
self.datas[2] = self.camera.get(cv2.CAP_PROP_EXPOSURE)
self.datas[3] = self.camera.get(cv2.CAP_PROP_BRIGHTNESS)
self.datas[4] = self.camera.get(cv2.CAP_PROP_CONTRAST)
self.datas[5] = self.camera.get(cv2.CAP_PROP_SATURATION)
self.datas[6] = self.camera.get(cv2.CAP_PROP_HUE)
self.datas[7] = self.camera.get(cv2.CAP_PROP_GAIN)
self.datas[8] = self.camera.get(cv2.CAP_PROP_SHARPNESS)
self.round+=1
self.image.emit([p, self.datas, frame])
def stop(self):
self.isRunning=False
def close(self) :
self.stop()
self.quit()
self.terminate()
def resolution(self, x, y) :
self.stop()
self.camera.set(cv2.CAP_PROP_FRAME_WIDTH, int(x))
self.camera.set(cv2.CAP_PROP_FRAME_HEIGHT, int(y))
self.round = 1
self.isRunning = True
#self.run()
def properties(self) :
self.stop()
self.camera.set(cv2.CAP_PROP_SETTINGS, 1)
self.isRunning = True
#self.run()
def parameters(self, datas) :
self.stop()
self.camera.get(cv2.CAP_PROP_FRAME_HEIGHT, datas[0])
self.camera.get(cv2.CAP_PROP_FRAME_WIDTH, datas[1])
self.camera.get(cv2.CAP_PROP_EXPOSURE, datas[2])
self.camera.get(cv2.CAP_PROP_BRIGHTNESS, datas[3])
self.camera.get(cv2.CAP_PROP_CONTRAST, datas[4])
self.camera.get(cv2.CAP_PROP_SATURATION, datas[5])
self.camera.get(cv2.CAP_PROP_HUE, datas[6])
self.camera.get(cv2.CAP_PROP_GAIN, datas[7])
self.camera.get(cv2.CAP_PROP_SHARPNESS, datas[8])
self.round = 1
self.isRunning = True
def read_parameters(self) :
self.datas[0] = self.camera.get(cv2.CAP_PROP_FRAME_HEIGHT)
self.datas[1] = self.camera.get(cv2.CAP_PROP_FRAME_WIDTH)
self.datas[2] = self.camera.get(cv2.CAP_PROP_EXPOSURE)
self.datas[3] = self.camera.get(cv2.CAP_PROP_BRIGHTNESS)
self.datas[4] = self.camera.get(cv2.CAP_PROP_CONTRAST)
self.datas[5] = self.camera.get(cv2.CAP_PROP_SATURATION)
self.datas[6] = self.camera.get(cv2.CAP_PROP_HUE)
self.datas[7] = self.camera.get(cv2.CAP_PROP_GAIN)
self.datas[8] = self.camera.get(cv2.CAP_PROP_SHARPNESS)
< /code>
Der Steckplatz: < /p>
- ist ein Qimage
Code: Select all
list[0]
- ist Kameraparameter
Code: Select all
list[1]
Code: Select all
@Slot(list)
def set_and_save_image_0(self, list):
if self.btn_auto.isChecked() :
self.array[0] = list[0]
# Update image
if self.widget_cams.image_test[0].isVisible() and self.btn_settings.isChecked() :
self.widget_cams.image_test[0].setPixmap(QPixmap.fromImage(list[0]))
#$Print datas
if list[1] != self.datas_before :
print(list[1])
try :
self.widget_cams.update_exposure(indice = 0)
except Exception as e :
print(str(e))
self.datas_before = list[1]
< /code>
Wenn ich ein Bild speichern möchte, mache ich < /p>
path_select = os.path.join(basedir, 'test'+str(0)+'.jpg')
self.array[0].save(path_select)
shutil.copy(path_select, path_image)