image-processing - raspberry - segmentacion de color opencv
¿Cómo llenar la imagen de OpenCV con un solo color? (6)
¿Cómo llenar la imagen de OpenCV con un solo color?
Cree una nueva imagen de 640x480 y llénela de color morado (rojo + azul):
cv::Mat mat(480, 640, CV_8UC3, cv::Scalar(255,0,255));
Nota:
- altura antes del ancho
- tipo CV_8UC3 significa 8 bits sin signo int, 3 canales
- el formato de color es BGR
He aquí cómo hacerlo con 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)
Aquí hay un ejemplo más completo de cómo crear una nueva imagen en blanco con cierto color 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)
Lo más simple es usar la clase OpenCV Mat:
img=cv::Scalar(blue_value, green_value, red_value);
donde img
se definió como un cv::Mat
.
Para una imagen OpenCV de 8 bits (CV_8U), la sintaxis es:
Mat img(Mat(nHeight, nWidth, CV_8U);
img = cv::Scalar(50); // or the desired uint8_t value from 0-255
Si está utilizando Java para OpenCV, puede usar el siguiente código.
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
Uso de la API C de OpenCV con IplImage* img
:
Use cvSet() : cvSet(img, CV_RGB(redVal,greenVal,blueVal));
Usando la API de OpenCV C ++ con cv::Mat img
, use:
cv::Mat::operator=(const Scalar& s)
como en:
img = cv::Scalar(redVal,greenVal,blueVal);
o el más general, máscara de apoyo, cv::Mat::setTo()
:
img.setTo(cv::Scalar(redVal,greenVal,blueVal));