如何用一种纯色填充OpenCV图像?


Answers:


98

将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));

4
是红色,绿色,蓝色还是蓝色,绿色,红色?opencv中不是蓝色,绿色,红色吗?
PC

15
它是蓝色,绿色,红色。认罪
The Unexpected

4
实际上,OpenCV是与通道顺序无关的。您很正确地认为(在PC上)最常见的通道顺序BGR与此答案不是很相关。跟踪频道顺序通常是用户的责任。
Adi Shavit

@AdiShavit我们可以从图片中删除设置的颜色吗?
Shwetabh Shekhar

2
@ShwetabhShekhar:这个问题含义和答案如此之多,以至于超出了评论的范围。但是简单地说,从现有C数组中“删除”三元组值是什么意思?
Adi Shavit

35

这是在Python中使用cv2的方法:

# 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

最简单的方法是使用OpenCV Mat类:

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

其中img被定义为一个cv::Mat


7

创建一个新的640x480图像,并用紫色(红色+蓝色)填充它:

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

注意:

  • 宽度前的高度
  • CV_8UC3类型表示8位无符号整数,3个通道
  • 颜色格式为BGR

6

对于8位(CV_8U)OpenCV映像,语法为:

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

5

使用numpy.full。这是一个Python,可创建灰色,蓝色,绿色和红色图像,并以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')

您将如何使用非灰色颜色进行此操作?
Alecg_O

更新为非灰色示例。
orangepips

4

如果将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

0

我亲自制作了此python代码,以更改使用openCV打开或创建的整个图像的颜色。不好意思,我是初学者。

def OpenCvImgColorChanger(img,blue = 0,green = 0,red = 0):
line = 1
ImgColumn = int(img.shape[0])-2
ImgRaw  = int(img.shape[1])-2



for j in range(ImgColumn):

    for i in range(ImgRaw):

        if i == ImgRaw-1:
            line +=1

        img[line][i][2] = int(red)
        img[line][i][1] = int(green)
        img[line][i][0] = int(blue)

1
欢迎来到SO!当您要回答一个已经被接受的旧问题(这个问题已经差不多10年了)了(在这里就是这种情况),请问自己:我真的有很大的进步吗?如果没有,请考虑不要回答。
Timus
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.