首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用OpenCV将RGB图像分离为红色和绿色的蓝色组件,并使用以下内容进行操作

使用OpenCV将RGB图像分离为红色和绿色的蓝色组件,并使用以下内容进行操作
EN

Stack Overflow用户
提问于 2019-05-01 01:11:48
回答 2查看 1.5K关注 0票数 0

我需要OpenCV和Python的帮助。

如何使用OpenCV和Python映像的绿色、红色和蓝色组件?为了处理这些矩阵,我还需要将每个矩阵细分为8x8个子矩阵,因为我正在考虑使用numpy。

到目前为止,我的代码如下所示,但我无法确定它是否正确。

代码语言:javascript
复制
import matplotlib.pyplot as plt
import cv2
import numpy as np

img = cv2.imread("4.jpg")
b = img[:,:,0]
g = img[:,:,1]
r = img[:,:,2]

divb = np.split(b,8)  # divide b in submatrices 8x8?
divg = np.split(g,8)  # divide g in submatrices 8x8?
divr = np.split(r,8)  # divide r in submatrices 8x8?

print('blue:', b)
print('red:', g)
print('green:', r)

cv2.imshow('img',img)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-01 02:09:27

不幸的是,没有内置的numpy方法将一个矩阵分解为8×8个子矩阵。此外,我在处理这个问题时的主要假设是,你可以将图像的宽度和高度设为8倍。我认为你绝对是在正确的轨道上:

代码语言:javascript
复制
img = cv2.imread("4.jpg")
b,g,r = cv2.split(img)

def sub_matrices(color_channel):
    matrices = []
    #How can you change how this loop iterates?
    #Also consider adding stopping conditions and/or additional loops for
    #excess parts of the image.
    for i in range(int(color_channel.shape[0]/8)):
        for j in range(int(color_channel.shape[1]/8)):
            matrices.append(color_channel[i*8:i*8 + 8, j*8:j*8+8])
    return matrices

#returns list of sub matrices
r_submatrices = sub_matrices(r)

代码应该很清楚。就像我说的,如果图像的维数没有填充到维数为8,那么图像的一部分就不会在任何子矩阵中(具体来说,对于此代码,请根据您的需要进行更改)。这段代码当然可以被优化(查找缓存阻塞),并对任意大小的子矩阵进行修改(我将作为练习留给您)。希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2022-01-10 13:55:49

代码语言:javascript
复制
import cv2
import matplotlib.pyplot as plt
    
img=cv2.imread("image.jpeg",1) 
    
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
R = img.copy() 
G = img.copy()
B = img.copy()

R[:,:,1] = R[:,:,2] = 0
G[:,:,0] = G[:,:,2] = 0
B[:,:,0] = B[:,:,1] = 0


fig = plt.figure(figsize=(18,18))
ax = fig.add_subplot(221)
bx = fig.add_subplot(222)
cx = fig.add_subplot(223)
dx = fig.add_subplot(224)

bx.imshow (R)
cx.imshow (G)
dx.imshow (B)
ax.imshow (img)



plt.show()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55930520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档