Wie fülle ich ein OpenCV-Bild mit einer Farbe?
Antworten:
Verwenden der OpenCV C-API mit IplImage* img
:
Verwenden Sie cvSet () :cvSet(img, CV_RGB(redVal,greenVal,blueVal));
Verwenden Sie die OpenCV C ++ - API mit cv::Mat img
und verwenden Sie dann entweder:
cv::Mat::operator=(const Scalar& s)
wie in:
img = cv::Scalar(redVal,greenVal,blueVal);
oder allgemeiner, Maskenunterstützung ,cv::Mat::setTo()
:
img.setTo(cv::Scalar(redVal,greenVal,blueVal));
BGR
obwohl dies für diese Antwort nicht sehr relevant ist. Es liegt im Allgemeinen in der Verantwortung des Benutzers, die Kanalreihenfolge zu verfolgen.
So geht's mit cv2 in Python:
# Create a blank 300x300 black image
image = np.zeros((300, 300, 3), np.uint8)
# Fill image with red color(set each pixel to red)
image[:] = (0, 0, 255)
Hier ist ein vollständigeres Beispiel zum Erstellen eines neuen leeren Bilds, das mit einer bestimmten RGB-Farbe gefüllt ist
import cv2
import numpy as np
def create_blank(width, height, rgb_color=(0, 0, 0)):
"""Create new image(numpy array) filled with certain color in RGB"""
# Create black blank image
image = np.zeros((height, width, 3), np.uint8)
# Since OpenCV uses BGR, convert the color first
color = tuple(reversed(rgb_color))
# Fill image with color
image[:] = color
return image
# Create new blank 300x300 red image
width, height = 300, 300
red = (255, 0, 0)
image = create_blank(width, height, rgb_color=red)
cv2.imwrite('red.jpg', image)
Am einfachsten ist die Verwendung der OpenCV Mat-Klasse:
img=cv::Scalar(blue_value, green_value, red_value);
wo img
wurde definiert als cv::Mat
.
Verwenden Sie numpy.full
. Hier ist ein Python, der ein graues, blaues, grünes und rotes Bild erstellt und in einem 2x2-Raster angezeigt wird.
import cv2
import numpy as np
gray_img = np.full((100, 100, 3), 127, np.uint8)
blue_img = np.full((100, 100, 3), 0, np.uint8)
green_img = np.full((100, 100, 3), 0, np.uint8)
red_img = np.full((100, 100, 3), 0, np.uint8)
full_layer = np.full((100, 100), 255, np.uint8)
# OpenCV goes in blue, green, red order
blue_img[:, :, 0] = full_layer
green_img[:, :, 1] = full_layer
red_img[:, :, 2] = full_layer
cv2.imshow('2x2_grid', np.vstack([
np.hstack([gray_img, blue_img]),
np.hstack([green_img, red_img])
]))
cv2.waitKey(0)
cv2.destroyWindow('2x2_grid')
Wenn Sie Java für OpenCV verwenden, können Sie den folgenden Code verwenden.
Mat img = src.clone(); //Clone from the original image
img.setTo(new Scalar(255,255,255)); //This sets the whole image to white, it is R,G,B value
Ich persönlich habe diesen Python-Code erstellt, um die Farbe eines gesamten mit openCV geöffneten oder erstellten Bildes zu ändern. Es tut mir leid, wenn es nicht gut genug ist, ich bin Anfänger 😚😚.
def OpenCvImgColorChanger(img,blue = 0,green = 0,red = 0):
line = 1
ImgColumn = int(img.shape[0])-2
ImgRaw = int(img.shape[1])-2
for j in range(ImgColumn):
for i in range(ImgRaw):
if i == ImgRaw-1:
line +=1
img[line][i][2] = int(red)
img[line][i][1] = int(green)
img[line][i][0] = int(blue)