Python - OPENCV Notları



Merhaba, 

Bu post altında çeşitli OPEN CV notları olacaktır.


VGA = 640*480 , HD = 1280*750 , FHD = 1920*1080 ,4K = 3840*2160

Binary Image 2 Levels 0=Black 1=White

8 Bits -> 2^8 = 256 --> 0 ile 255 arasındaki tonlar. 0 Black 255 White

RGB VGA = 640*480*3 Channel (Red,Green,Blue)



Resim video kamera işlemleri

import cv2

img = cv2.imread("0.png") # resmi içeri aktar

cv2.imshow("pencere adı", img) #aktarılan resmi göster

cv2.waitKey(0) 

---------------------------

cap = cv2.VideoCapture("video.mp4") # videoyu içeri aktar

while True:

    success, img = cap.read()

    cv2.imshow("Video",img)

    if(cv2.waitKey(1) & 0xFF == ord('q')):

        break

-------------------------

cap = cv2.VideoCapture(0) # varsayılan kamerayı alır

cap.set(3,640) #genişlik

cap.set(4,480) #yükseklik

cap.set(10,100) #aydınlık ayarı

while True:

    success, img = cap.read()

    cv2.imshow("Video",img)

    if(cv2.waitKey(1) & 0xFF == ord('q')):

        break


BASİT FONKSİYONLAR


import cv2

import numpy as np


#Basic Functions

img = cv2.imread("fener.png")

kernel = np.ones((5,5),np.uint8)


imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # gri tonlama

imgBlur = cv2.GaussianBlur(imgGray, (7,7), 0) #bulanıklaştırma

imgCanny = cv2.Canny(img, 150, 200)#kenar bulma

imgDialation = cv2.dilate(imgCanny,kernel,iterations=1) #Genişleme

imgEroded = cv2.erode(imgDialation,kernel,iterations=1) #Erozyon


cv2.imshow("Orjinal",img)

cv2.imshow("Gray",imgGray)

cv2.imshow("Blur",imgBlur)

cv2.imshow("Canny",imgCanny)

cv2.imshow("Dialation",imgDialation)

cv2.imshow("Eroded",imgEroded)

cv2.waitKey(0)


PİKSEL İŞLEMLERİ


import cv2

import numpy as np

#Piksel İşlemleri

img = cv2.imread("fener.png")

print(img.shape) # (410,410,3)(Genişlik,Yükseklik,BGR)


imgResize = cv2.resize(img,(300,200)) #(width,height)

imgCropped = img[0:200,200:400] #(yBasla:yBitis, xBasla:xBitis)


cv2.imshow("Orjinal",img)

cv2.imshow("Resize",imgResize)

cv2.imshow("Cropped",imgCropped)

cv2.waitKey(0)




SHAPES AND TEXTS  - Şekil çizme ve yazı ekleme


import cv2

import numpy as np


#Şekil çizimleri ve resim üzerine yazı yazma

img = np.zeros((512,512))

print(img.shape) #(512,512)

#renk işlevselliği verebilmek için 3 kanal vermeliyiz.

img = np.zeros((512,512,3),np.uint8) #uint8 0 ile 255 arası değer alabiliyor


#renk kodları BGR

img[:] = 255,0,0 # her elemana bu renk kodu vererek mavi renk oluşturduk

img[200:300,100:300]=0,255,0 # belirlenen noktalar arasını doldurduk

#çizgi(resim,baş koordinat, bit koordinat,renk,kalınlık)

cv2.line(img,(0,0),(300,300),(0,0,255),8)

#img.shape[0]=yükselik, img.shape[1] = genişlik, img.shape[2]= kanal sayısı

cv2.line(img,(0,0),(img.shape[1],img.shape[0]),(0,255,255),2)


#dikdörtgen çizimi

cv2.rectangle(img,(0,0),(250,350),(255,255,0),3)

#cv2.rectangle(img,(0,0),(250,350),(255,255,0),cv2.FILLED) #içini doldur

#daire çizimi

cv2.circle(img,(400,50),30,(255,255,255),5)

#yazı yazma

cv2.putText(img, "Open CV", (300,200), cv2.FONT_HERSHEY_COMPLEX, 1, (0,150,0),1)


cv2.imshow("Image",img)

cv2.waitKey(0)


GÖRÜNÜM DÜZENLEME Perspektif alma



#resim kesip döndürme

img = cv2.imread("iskambil.jpg")


width,height=250,350

pts1 = np.float32([[461,144],[787,231 ],[344,609],[669,691]])

pts2 = np.float32([[0,0],[width,0 ],[0,height],[width,height]])

matrix = cv2.getPerspectiveTransform(pts1,pts2)

imgOutput = cv2.warpPerspective(img, matrix, (width,height))


cv2.imshow("Resim",img)

cv2.imshow("Output",imgOutput)

cv2.waitKey(0)


#461,144 sol ust,787,231 sağ üst,344,609 sol alt,669,691 sağ alt


GÖRÜNTÜ BİRLEŞTİRME


Bu fonksiyonu kullanarak kolayca boyutlandırıp birleştirme yapılabilir.

def stackImages(scale,imgArray):

    rows = len(imgArray)

    cols = len(imgArray[0])

    rowsAvailable = isinstance(imgArray[0], list)

    width = imgArray[0][0].shape[1]

    height = imgArray[0][0].shape[0]

    if rowsAvailable:

        for x in range ( 0, rows):

            for y in range(0, cols):

                if imgArray[x][y].shape[:2] == imgArray[0][0].shape [:2]:

                    imgArray[x][y] = cv2.resize(imgArray[x][y], (0, 0), None, scale, scale)

                else:

                    imgArray[x][y] = cv2.resize(imgArray[x][y], (imgArray[0][0].shape[1], imgArray[0][0].shape[0]), None, scale, scale)

                if len(imgArray[x][y].shape) == 2: imgArray[x][y]= cv2.cvtColor( imgArray[x][y], cv2.COLOR_GRAY2BGR)

        imageBlank = np.zeros((height, width, 3), np.uint8)

        hor = [imageBlank]*rows

        hor_con = [imageBlank]*rows

        for x in range(0, rows):

            hor[x] = np.hstack(imgArray[x])

        ver = np.vstack(hor)

    else:

        for x in range(0, rows):

            if imgArray[x].shape[:2] == imgArray[0].shape[:2]:

                imgArray[x] = cv2.resize(imgArray[x], (0, 0), None, scale, scale)

            else:

                imgArray[x] = cv2.resize(imgArray[x], (imgArray[0].shape[1], imgArray[0].shape[0]), None,scale, scale)

            if len(imgArray[x].shape) == 2: imgArray[x] = cv2.cvtColor(imgArray[x], cv2.COLOR_GRAY2BGR)

        hor= np.hstack(imgArray)

        ver = hor

    return ver

#-------------------------------


img = cv2.imread("fener.png")

imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)


#imgHor = np.hstack((img,img)) #yatay iki resimi birleştirdi.

#imgVer = np.vstack((img,img)) #dikey iki resimi birleştirdi.

#cv2.imshow("Yatay",imgHor)

#cv2.imshow("Dikey",imgVer)


StackedImages = stackImages(0.6,([img,imgGray],

                                                   [imgGray,img]))

cv2.imshow("Staked Images", StackedImages)

cv2.waitKey(0)


Görüntü Maskeleme


path = 'fener.png'

def empty(a):

    pass


cv2.namedWindow("TrackBars")

cv2.resizeWindow("TrackBars",640,240)

cv2.createTrackbar("Hue Min", "TrackBars", 0, 179, empty)

cv2.createTrackbar("Hue Max", "TrackBars", 179, 179, empty)

cv2.createTrackbar("Sat Min", "TrackBars", 0, 255, empty)

cv2.createTrackbar("Sat Max", "TrackBars", 255, 255, empty)

cv2.createTrackbar("Val Min", "TrackBars", 0, 255, empty)

cv2.createTrackbar("Val Max", "TrackBars", 255, 255, empty)


while True:

    

    img = cv2.imread(path)

    

    imgHSV = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

    h_min = cv2.getTrackbarPos("Hue Min", "TrackBars")

    h_max = cv2.getTrackbarPos("Hue Max", "TrackBars")

    s_min = cv2.getTrackbarPos("Sat Min", "TrackBars")

    s_max = cv2.getTrackbarPos("Sat Max", "TrackBars")

    v_min = cv2.getTrackbarPos("Val Min", "TrackBars")

    v_max = cv2.getTrackbarPos("Val Max", "TrackBars")

    

    lower = np.array([h_min,s_min,v_min])

    upper = np.array([h_max,s_max,v_max])

    mask = cv2.inRange(imgHSV, lower, upper)

    imgResult = cv2.bitwise_and(img,img,mask=mask)

    

    StackedImages = stackImages(0.6,([img,imgHSV], [mask,imgResult])) 

    cv2.imshow("Staked Images", StackedImages)

    cv2.waitKey(1)


#Contours - Shape Detection - Bir görüntüdeki şekilleri tespit etme

#Köşe noktalarını tespit edip nesnenin şeklinin ne olduğunun bulunması


import cv2

import numpy as np


def stackImages(scale,imgArray):

    rows = len(imgArray)

    cols = len(imgArray[0])

    rowsAvailable = isinstance(imgArray[0], list)

    width = imgArray[0][0].shape[1]

    height = imgArray[0][0].shape[0]

    if rowsAvailable:

        for x in range ( 0, rows):

            for y in range(0, cols):

                if imgArray[x][y].shape[:2] == imgArray[0][0].shape [:2]:

                    imgArray[x][y] = cv2.resize(imgArray[x][y], (0, 0), None, scale, scale)

                else:

                    imgArray[x][y] = cv2.resize(imgArray[x][y], (imgArray[0][0].shape[1], imgArray[0][0].shape[0]), None, scale, scale)

                if len(imgArray[x][y].shape) == 2: imgArray[x][y]= cv2.cvtColor( imgArray[x][y], cv2.COLOR_GRAY2BGR)

        imageBlank = np.zeros((height, width, 3), np.uint8)

        hor = [imageBlank]*rows

        hor_con = [imageBlank]*rows

        for x in range(0, rows):

            hor[x] = np.hstack(imgArray[x])

        ver = np.vstack(hor)

    else:

        for x in range(0, rows):

            if imgArray[x].shape[:2] == imgArray[0].shape[:2]:

                imgArray[x] = cv2.resize(imgArray[x], (0, 0), None, scale, scale)

            else:

                imgArray[x] = cv2.resize(imgArray[x], (imgArray[0].shape[1], imgArray[0].shape[0]), None,scale, scale)

            if len(imgArray[x].shape) == 2: imgArray[x] = cv2.cvtColor(imgArray[x], cv2.COLOR_GRAY2BGR)

        hor= np.hstack(imgArray)

        ver = hor

    return ver




#Contours - Shape Detection - Bir görüntüdeki şekilleri tespit etme

#Köşe noktalarını tespit edip nesnenin şeklinin ne olduğunun bulunması


def getContours(img):

    contours,hierarchy = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

    for cnt in contours:

        area = cv2.contourArea(cnt)

        print(area)

        cv2.drawContours(imgContour, cnt, -1, (255,0,0),3)

        peri = cv2.arcLength(cnt, True)

        approx = cv2.approxPolyDP(cnt,0.02*peri, True) 

        objCor = len(approx)

        x, y, w, h = cv2.boundingRect(approx)

        

        if objCor == 3: objectType = "Ucgen"

        elif objCor == 4:

            aspRatio = w/float(h)

            if aspRatio>0.95 and aspRatio <1.05: objectType="Kare"

            else:objectType="Dikdortgen"

        elif objCor > 4:objectType="Daire"

        else: objectType="None"

        

        cv2.rectangle(imgContour, (x,y), (x+w,y+h), (0,255,0),3)

        cv2.putText(imgContour,objectType,(x+(w//2)-10,y+(h//2)-10),cv2.FONT_HERSHEY_COMPLEX,0.5,(0,0,0),2)

        

        



path = 'shapes.png'

img = cv2.imread(path)

imgContour = img.copy()

imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

imgBlur = cv2.GaussianBlur(imgGray, (7,7), 1)

imgCanny = cv2.Canny(imgBlur,50,50)

getContours(imgCanny)


imgBlank = np.zeros_like(img)

StackedImages = stackImages(0.6,([img,imgGray,imgBlur],

                                 [imgCanny,imgContour,imgBlank]))

cv2.imshow("Staked Images", StackedImages)

cv2.waitKey(0)



Videolara FPS Ekleme

import cv2

import time

pTime=0

cap = cv2.VideoCapture("video.mp4")

while True:

    ret, frame = cap.read()

    height, width, _ = frame.shape

    #FPS

    cTime =time.time()

    fps = 1 / (cTime-pTime)

    pTime=cTime   

    cv2.putText(frame, 'FPS:' + str(int(fps)),(20,70),cv2.FONT_HERSHEY_PLAIN,3,(0,255,0),3)

    cv2.imshow("Frame", frame)

    key = cv2.waitKey(30)

    if key == 27:

        break


cap.release()

cv2.destroyAllWindows()



1 yorum:

Write yorum