我正在尝试拍摄图像,如果其中有任何红色,则逐像素检查。
如果有,请用白色替换它。一旦它贯穿每个像素,它将返回一个白色而不是红色的新图像。
以下是我的尝试:
import cv2
import numpy as np
def take_out_red():
'''
Takes an image, and returns the same image with red replaced
by white
------------------------------------------------------------
Postconditions:
returns
new_img (no red)
'''
img = cv2.imread('red.png',1)
#Reads the image#
new_img = img
#Makes a copy of the image
for i in range(499):
for y in range(499):
if np.all(img[i,y]) == np.all([0,0,253]):
#[0,0,253] is a red pixel
#Supposed to check if the particular pixel is red
new_img[i,y] == [255,255,255]
#if it is red, it'll replace that pixel in the new_image
#with a white pixel
return cv2.imshow('image',new_img)
#returns the new_image with no red
任何帮助都将受到高度赞赏,非常感谢您提前。
答案 0 :(得分:1)
如果您的服务有OpenCV
或numpy
,那么您可能不需要编写双重迭代for
循环,这些循环也不干净且效率低下。这两个库都有非常有效的例程来迭代n-D数组并应用基本操作,例如检查相等性等。
您可以使用cv2.inRane()
方法从输入图像中分割红色,然后使用强大的numpy
使用从cv2.inRange()
获得的蒙版替换颜色:
import cv2
import numpy as np
img = cv2.imread("./sample_img.png")
red_range_lower = np.array([0, 0, 240])
red_range_upper = np.array([0, 0, 255])
replacement_color = np.array([255, 0, 0])
red_mask = cv2.inRange(img, red_range_lower, red_range_upper)
img[red_mask == 255] = replacement_color
cv2.imwrite("./output.png", img)
输入:
输出:
答案 1 :(得分:0)
If img[i,y] == [0,0,255]:
是你的问题。你试图将两个值的东西与三个值进行比较,而且没有办法检查它。