2010-12-02 5 views

Répondre

77

En utilisant l'API OpenCV C avec IplImage* img:

Utilisation cvSet(): cvSet(img, CV_RGB(redVal,greenVal,blueVal));

En utilisant l'API OpenCV C++ avec cv::Mat img, utilisez alors:

cv::Mat::operator=(const Scalar& s) comme dans:

img = cv::Scalar(redVal,greenVal,blueVal); 

ou the more general, mask supporting, cv::Mat::setTo():

img.setTo(cv::Scalar(redVal,greenVal,blueVal)); 
+3

Devrait ce soit rouge, vert, bleu OU bleu, vert, rouge? N'est-ce pas bleu, vert, rouge en opencv? –

+13

C'est bleu, vert, rouge. Confrmed – TheUnexpected

+3

En fait, OpenCV est agnostique d'ordre de canal. Vous avez raison de dire que l'ordre des canaux le plus courant (sur PC) est 'BGR', bien que cela ne soit pas très pertinent pour cette réponse. Il incombe généralement à l'utilisateur de suivre l'ordre des chaînes. –

9

Le plus simple en utilisant la classe OpenCV Mat:

img=cv::Scalar(blue_value, green_value, red_value); 

img a été défini comme un cv::Mat.

13

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) 

est ici exemple plus complet comment créer une nouvelle image vide remplie d'une certaine couleur RVB

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) 
4

Pour un 8 bits (CV_8U) L'image OpenCV, la syntaxe est:

Mat img(Mat(nHeight, nWidth, CV_8U); 
img = cv::Scalar(50); // or the desired uint8_t value from 0-255 
3

Si vous utilisez Java pour OpenCV, alors vous pouvez utiliser le code de llowing.

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 
4

Insérer un nouvel 640x480 image et de le remplir avec du violet (rouge + bleu):

cv::Mat mat(480, 640, CV_8UC3, cv::Scalar(255,0,255)); 

Note:

  • hauteur avant largeur CV_8UC3 de type
  • signifie 8 bits non signé int, 3 canaux
  • le format de couleur est BGR
Questions connexes