How to Mask an image using Numpy/OpenCV?

前端 未结 4 1688
别跟我提以往
别跟我提以往 2020-12-14 22:32

I have an image I load with:

im = cv2.imread(filename)

I want to keep data that is in the center of the image. I created a circle as a mas

4条回答
  •  臣服心动
    2020-12-14 23:09

    In this case if you want to have a circular image you must write a new algorithm and first you must be able to access to the coordinates of the pixels. Then you can simply compare pixels that are not within the scope of that circle or not and replace them with some value (or NULL if it's accepted with your image format criteria).

    Here is an example:

    import cv2
    import numpy as np
    im = cv2.imread('sss.png')
    
    
    def facechop(im):
    
     height,width,depth = im.shape
     #circle = np.zeros((height,width))
     #print circle
     x=width/2
     y=height/2
     circle=cv2.circle(im,(width/2,height/2),180,1,thickness=1)
     #newcameramtx, roi=cv2.getOptimalNewCameraMatrix(im,10,(w,h),1,(w,h))
     cv2.rectangle(im,(x-180,y-180),(x+180,y+180),(0,0,255),2)
     crop_img = im[y-180:y+180,x-180:x+180]
     lastim=np.equal(crop_img,circle)
     #dd=np.logical_and(crop_img,circle)
    
     for i in range(len(last_im)) :
         if last_im[i].all()==False:
             crop_img[i]=[0,0,0]
    
    
     cv2.imshow('im',crop_img)
    if __name__ == '__main__':
        facechop(im)
        while(True):
            key = cv2.waitKey(20)
            if key in [27, ord('Q'), ord('q')]:
                break
    

提交回复
热议问题