How to fill OpenCV image with one solid color?

前端 未结 8 1445
陌清茗
陌清茗 2020-12-01 11:32

How to fill OpenCV image with one solid color?

相关标签:
8条回答
  • 2020-12-01 12:00

    Create a new 640x480 image and fill it with purple (red+blue):

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

    Note:

    • height before width
    • type CV_8UC3 means 8-bit unsigned int, 3 channels
    • colour format is BGR
    0 讨论(0)
  • 2020-12-01 12:02

    Use numpy.full. Here's a Python that creates a gray, blue, green and red image and shows in a 2x2 grid.

    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')
    
    0 讨论(0)
  • 2020-12-01 12:04

    Using the OpenCV C API with IplImage* img:

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

    Using the OpenCV C++ API with cv::Mat img, then use either:

    cv::Mat::operator=(const Scalar& s) as in:

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

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

    img.setTo(cv::Scalar(redVal,greenVal,blueVal));
    
    0 讨论(0)
  • 2020-12-01 12:16

    For an 8-bit (CV_8U) OpenCV image, the syntax is:

    Mat img(Mat(nHeight, nWidth, CV_8U);
    img = cv::Scalar(50);    // or the desired uint8_t value from 0-255
    
    0 讨论(0)
  • 2020-12-01 12:21

    The simplest is using the OpenCV Mat class:

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

    where img was defined as a cv::Mat.

    0 讨论(0)
  • 2020-12-01 12:23

    If you are using Java for OpenCV, then you can use the following code.

    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
    
    0 讨论(0)
提交回复
热议问题