Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to delete a certain part of an Image?

I have an image: Original Image

I want to remove the grey mesh part of the image without affecting the rest of the image i.e., the part inside the black circle. I have written a code for that

import cv2
import numpy as np
from PIL import Image
imag = Image.open('results.jpg')
imag.show()

pixelMap = imag.load()

img = Image.new( imag.mode, imag.size)
pixelsNew = img.load()

for i in range(img.size[0]):
    for j in range(img.size[1]):        
        if (( pixelMap[i,j]> (200,0,0)) and (pixelMap[i,j]< (240,0,0))):
            pixelsNew[i,j] = (255,255,255)
        else:
            pixelsNew[i,j] = pixelMap[i,j]
img.show()

with this code I have got the following output image: Output Image

But, Some of the pixels inside the black circle were also changed to white, which is not what I want. I would like to know how can this problem be solved.

like image 924
Akash Tripuramallu Avatar asked Dec 29 '25 18:12

Akash Tripuramallu


1 Answers

You can find the indices of black circle and assign values to the pixels that are either to the left or to the right of black circle. Below is the sample code for this

import cv2
import numpy as np

# read the image
img = cv2.imread('original.png')
cv2.imshow("Image", img)

# convert image to numpy array and also to grayscale
img = np.array(img)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# get height and width of image
[rows, cols] = gray.shape

# now extract one row from image, find indices of black circle
# and make those pixels white which are to the left/right
# of black cirlce
for i in range(rows):
    row = gray[i, :] # extract row of image
    indices = np.where(row == 0)    # find indices of black circle
    indices = indices[0]

    # if indices are not empty
    if len(indices) > 0:
        # find starting/ending column index
        si = indices[0]
        ei = indices[len(indices)-1]

        # assign values to the range of pixels
        img[i, 0:si-1] = [255, 255, 255]
        img[i, ei+1:] = [255, 255, 255]
    # if indices is empty then make whole row white
    else:
        img[i,:] = [255, 255, 255]

cv2.imshow("Modified Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Input Image

Input Image

Output Image

Output Image

like image 154
user8190410 Avatar answered Jan 04 '26 07:01

user8190410



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!