Initial commit
This commit is contained in:
6
OpenCV/tutoriel21/README.md
Normal file
6
OpenCV/tutoriel21/README.md
Normal file
@@ -0,0 +1,6 @@
|
||||
# Tutoriel OpenCV
|
||||
## Détection d'objet avec calcBackProject
|
||||
|
||||
La vidéo du tutoriel est à l'adresse:
|
||||
https://www.youtube.com/watch?v=nMJertuuO08
|
||||
|
||||
63
OpenCV/tutoriel21/calcBackProject.py
Normal file
63
OpenCV/tutoriel21/calcBackProject.py
Normal file
@@ -0,0 +1,63 @@
|
||||
import cv2
|
||||
import numpy as np
|
||||
from matplotlib import pyplot as plt
|
||||
|
||||
nbr_classes=180
|
||||
seuil=30
|
||||
objet=0
|
||||
|
||||
def click(event, x, y, flags, param):
|
||||
global roi_hist, frame, objet
|
||||
if event==cv2.EVENT_LBUTTONDBLCLK:
|
||||
roi_x, roi_y, roi_w, roi_h=cv2.selectROI('ROI', frame, False, False)
|
||||
roi=frame[roi_y: roi_y + roi_h, roi_x: roi_x + roi_w]
|
||||
hsv_roi=cv2.cvtColor(roi, cv2.COLOR_BGR2HSV)
|
||||
roi_hist=cv2.calcHist([hsv_roi], [0], None, [nbr_classes], [0, nbr_classes])
|
||||
cv2.normalize(roi_hist, roi_hist, 0, 255, cv2.NORM_MINMAX)
|
||||
cv2.destroyWindow('ROI')
|
||||
plt.clf()
|
||||
plt.plot(roi_hist)
|
||||
plt.show(block=False)
|
||||
plt.pause(0.01)
|
||||
objet=1
|
||||
|
||||
video=cv2.VideoCapture(0)
|
||||
cv2.namedWindow('Camera')
|
||||
cv2.setMouseCallback('Camera', click)
|
||||
while True:
|
||||
ret, frame=video.read()
|
||||
if ret is False:
|
||||
quit()
|
||||
|
||||
if objet:
|
||||
hsv=cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
|
||||
mask=cv2.calcBackProject([hsv], [0], roi_hist, [0, nbr_classes], 1)
|
||||
|
||||
_, mask2=cv2.threshold(mask, seuil, 255, cv2.THRESH_BINARY)
|
||||
mask2=cv2.erode(mask2, None, iterations=3)
|
||||
mask2=cv2.dilate(mask2, None, iterations=3)
|
||||
|
||||
cv2.imshow("Mask2", mask2)
|
||||
image2=cv2.bitwise_and(frame, frame, mask=mask2)
|
||||
cv2.imshow("Image2", image2)
|
||||
|
||||
elements=cv2.findContours(mask2, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2]
|
||||
if len(elements) > 0:
|
||||
c=max(elements, key=cv2.contourArea)
|
||||
x,y,w,h=cv2.boundingRect(c)
|
||||
cv2.rectangle(frame, (x,y), (x+w,y+h), (0,255,0), 2)
|
||||
|
||||
cv2.imshow("Mask", mask)
|
||||
cv2.putText(frame, "seuil[p|m]: {:d}".format(seuil), (10, 40), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 0, 0), 1)
|
||||
|
||||
cv2.imshow("Camera", frame)
|
||||
key=cv2.waitKey(1)
|
||||
if key==ord('q'):
|
||||
quit()
|
||||
if key==ord('p'):
|
||||
seuil=min(250, seuil+1)
|
||||
if key==ord('m'):
|
||||
seuil=max(1, seuil-1)
|
||||
|
||||
video.release()
|
||||
cv2.destroyAllWindows()
|
||||
69
OpenCV/tutoriel21/calcBackProject2.py
Normal file
69
OpenCV/tutoriel21/calcBackProject2.py
Normal file
@@ -0,0 +1,69 @@
|
||||
import cv2
|
||||
import numpy as np
|
||||
from matplotlib import pyplot as plt
|
||||
|
||||
objet=0
|
||||
nbr_classes=180
|
||||
seuil=30
|
||||
v1=0
|
||||
|
||||
def click(event, x, y, flags, param):
|
||||
global roi_hist, frame, objet
|
||||
if event==cv2.EVENT_LBUTTONDBLCLK:
|
||||
roi_x, roi_y, roi_w, roi_h=cv2.selectROI('ROI', frame, False, False)
|
||||
roi=frame[roi_y: roi_y + roi_h, roi_x: roi_x + roi_w]
|
||||
hsv_roi=cv2.cvtColor(roi, cv2.COLOR_BGR2HSV)
|
||||
roi_hist=cv2.calcHist([hsv_roi], [0, 1], None, [nbr_classes, 256], [0, nbr_classes, 0, 256])
|
||||
cv2.normalize(roi_hist[0, :], roi_hist[0, :], 0, 255, cv2.NORM_MINMAX)
|
||||
cv2.normalize(roi_hist[1, :], roi_hist[1, :], 0, 255, cv2.NORM_MINMAX)
|
||||
cv2.destroyWindow('ROI')
|
||||
plt.clf()
|
||||
plt.plot(roi_hist[0, :])
|
||||
plt.plot(roi_hist[1, :])
|
||||
plt.show(block=False)
|
||||
plt.pause(0.01)
|
||||
objet=1
|
||||
|
||||
video=cv2.VideoCapture(0)
|
||||
cv2.namedWindow('Camera')
|
||||
cv2.setMouseCallback('Camera', click)
|
||||
while True:
|
||||
ret, frame=video.read()
|
||||
if ret is False:
|
||||
quit()
|
||||
|
||||
if objet:
|
||||
hsv=cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
|
||||
mask=cv2.calcBackProject([hsv], [0, 1], roi_hist, [0, nbr_classes, v1, 256], 1)
|
||||
|
||||
_, mask2=cv2.threshold(mask, seuil, 255, cv2.THRESH_BINARY)
|
||||
mask2=cv2.erode(mask2, None, iterations=3)
|
||||
mask2=cv2.dilate(mask2, None, iterations=5)
|
||||
|
||||
elements=cv2.findContours(mask2, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2]
|
||||
if len(elements) > 0:
|
||||
c=max(elements, key=cv2.contourArea)
|
||||
x,y,w,h=cv2.boundingRect(c)
|
||||
cv2.rectangle(frame, (x,y), (x+w,y+h), (0, 255, 0), 2)
|
||||
|
||||
cv2.imshow("Mask", mask)
|
||||
cv2.imshow("Mask2", mask2)
|
||||
image2=cv2.bitwise_and(frame, frame, mask=mask2)
|
||||
cv2.imshow("Image2", image2)
|
||||
cv2.putText(frame, "seuil[p|m]: {:d} v1[o|l]: {:d}".format(seuil, v1), (10, 40), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 0, 0), 1)
|
||||
|
||||
cv2.imshow("Camera", frame)
|
||||
key=cv2.waitKey(5)
|
||||
if key==ord('q'):
|
||||
quit()
|
||||
if key==ord('p'):
|
||||
seuil=min(250, seuil+1)
|
||||
if key==ord('m'):
|
||||
seuil=max(1, seuil-1)
|
||||
if key==ord('o'):
|
||||
v1=min(250, v1+1)
|
||||
if key==ord('l'):
|
||||
v1=max(0, v1-1)
|
||||
|
||||
video.release()
|
||||
cv2.destroyAllWindows()
|
||||
44
OpenCV/tutoriel21/histogramme.py
Normal file
44
OpenCV/tutoriel21/histogramme.py
Normal file
@@ -0,0 +1,44 @@
|
||||
import cv2
|
||||
import numpy as np
|
||||
from matplotlib import pyplot as plt
|
||||
|
||||
video=cv2.VideoCapture(0)
|
||||
mode=0
|
||||
nbr_classes=180
|
||||
|
||||
while True:
|
||||
ret, frame=video.read()
|
||||
if ret is False:
|
||||
quit()
|
||||
|
||||
if mode:
|
||||
frame=cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
|
||||
hist=cv2.calcHist([frame], [0], None, [nbr_classes], [0, 256])
|
||||
label="Intensité"
|
||||
else:
|
||||
hsv=cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
|
||||
hist=cv2.calcHist([hsv], [0], None, [nbr_classes], [0, 180])
|
||||
label="Couleur"
|
||||
cv2.normalize(hist, hist, 0, 255, cv2.NORM_MINMAX)
|
||||
|
||||
cv2.putText(frame, "Mode[o] {:d} Nbr classes[p|m]: {:d}".format(mode, nbr_classes), (10, 30), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 0, 255), 1)
|
||||
plt.clf()
|
||||
plt.plot(hist)
|
||||
plt.title(label)
|
||||
plt.show(block=False)
|
||||
cv2.imshow("image", frame)
|
||||
plt.pause(0.001)
|
||||
|
||||
key=cv2.waitKey(5)&0xFF
|
||||
if key==ord('q'):
|
||||
quit()
|
||||
if key==ord('o'):
|
||||
mode=not mode
|
||||
nbr_classes=(255 if mode else 180)
|
||||
if key==ord('p'):
|
||||
nbr_classes*=2
|
||||
if key==ord('m'):
|
||||
nbr_classes//=2
|
||||
|
||||
video.release()
|
||||
cv2.destroyAllWindows()
|
||||
Reference in New Issue
Block a user