Как заполнить изображение OpenCV одним сплошным цветом? - PullRequest
66 голосов
/ 02 декабря 2010

Как заполнить изображение OpenCV одним сплошным цветом?

Ответы [ 7 ]

88 голосов
/ 02 декабря 2010

Использование OpenCV C API с IplImage* img:

Использовать cvSet () : cvSet(img, CV_RGB(redVal,greenVal,blueVal));

Используя OpenCV C ++ API с cv::Mat img, затем используйте:

cv::Mat::operator=(const Scalar& s) как в:

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

или более общая маска, поддерживающая маску, cv::Mat::setTo():

img.setTo(cv::Scalar(redVal,greenVal,blueVal));
22 голосов
/ 07 апреля 2014

Вот как сделать с cv2 в 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)

Вот более полный пример того, как создать новое пустое изображение, заполненное определенным цветом 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)
10 голосов
/ 06 ноября 2012

Самым простым является использование класса OpenCV Mat:

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

, где img было определено как cv::Mat.

7 голосов
/ 12 марта 2017

Создайте новое изображение 640x480 и залейте его фиолетовым (красный + синий):

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

Примечание:

  • высота до ширины
  • тип CV_8UC3 означает 8-разрядное целое число без знака, 3 канала
  • Цветовой формат BGR
6 голосов
/ 26 марта 2015

Для 8-битного (CV_8U) образа OpenCV синтаксис:

Mat img(Mat(nHeight, nWidth, CV_8U);
img = cv::Scalar(50);    // or the desired uint8_t value from 0-255
4 голосов
/ 15 февраля 2017

Если вы используете Java для OpenCV, вы можете использовать следующий код.

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
1 голос
/ 21 сентября 2018

Использование numpy.full. Вот пример Python, который устанавливает все изображение серым и обеспечивает 8-разрядный целочисленный тип результата без знака.

import cv2
import numpy as np
img = np.full((100, 100, 3), 127, np.uint8) 
cv2.imshow('single color', img)
cv2.waitKey(0)
cv2.destroyWindow('single color')
...