Comment remplir une image OpenCV avec une couleur unie ?
Est-ce que ça devrait être rouge, vert, bleu OU bleu, vert, rouge ? Ce n'est pas bleu, vert, rouge dans opencv ?
Comment remplir une image OpenCV avec une couleur unie ?
Utilisation de l'API C d'OpenCV avec IplImage* img
:
Utilisez cvSet() : cvSet(img, CV_RGB(redVal,greenVal,blueVal));
Utilisation de l'API OpenCV C++ avec cv::Mat img
alors utilisez l'un ou l'autre :
cv::Mat::operator=(const Scalar& s)
comme dans :
img = cv::Scalar(redVal,greenVal,blueVal);
ou le plus général, masque à l'appui, cv::Mat::setTo()
:
img.setTo(cv::Scalar(redVal,greenVal,blueVal));
Est-ce que ça devrait être rouge, vert, bleu OU bleu, vert, rouge ? Ce n'est pas bleu, vert, rouge dans opencv ?
En fait, OpenCV est agnostique quant à l'ordre des canaux. Vous avez raison de dire que l'ordre des canaux le plus courant (sur les PC) est le suivant BGR
bien que cela ne soit pas très pertinent pour cette réponse. C'est généralement la responsabilité de l'utilisateur de suivre l'ordre des canaux.
Voici comment faire avec cv2 en 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)
Voici un exemple plus complet de la façon de créer une nouvelle image vierge remplie d'une certaine couleur RGB.
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)
Utilisez numpy.full
. Voici un Python qui crée une image grise, bleue, verte et rouge et l'affiche dans une grille 2x2.
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')
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Duplicata stackoverflow.com/questions/4329419/