如何在OpenCV上计算和排序RGB数据?

时间:2019-01-28 04:46:00

标签: python-3.x numpy opencv

RGB数据。如何在Python,OpenCV上对其进行计算和排序

我想在Python,OpenCV上执行以下这些步骤

1. Get the RGB data from pictures
2. Calculate the R*G*B on each pixel of the pictures
3. Sort the data by descending order and plot them on graph or csv
4. Get the max and min and medium of R*G*B

我可以处理step1。如下面的代码。 但是,我不知道如何在步骤2之后编写程序 最好将数据另存为csv或numpy 有人有主意吗?请帮我。如果您向我展示代码,将非常有帮助。

import cv2
import numpy


im_f = np.array(Image.open('data/image.jpg'), 'f')
print(im[:, :]) 

1 个答案:

答案 0 :(得分:0)

最好将数据作为numpy数组保存在内存中。另外,如果最终必须转换为cv2.imread,则使用Image.open而不是np.array读取图像。

对于绘图,可以使用matplotlib

以下是使用OpenCVnumpymatplotlib来实现上述过程的方法。

import numpy as np
import cv2, sys
import matplotlib.pyplot as plt

#Read image
im_f = cv2.imread('data/image.jpg')

#Validate image
if im_f is None:
    print('Image Not Found')
    sys.exit();

#Cast to float type to hold the results
im_f = im_f.astype(np.float32)


#Compute the product of channels and flatten the result to get 1D array
product = (im_f[:,:,0] * im_f[:,:,1] * im_f[:,:,2]).flatten()

#Sort the flattened array and flip it to get elements in descending order
product = np.sort(product)[::-1]

#Compute the min, max and median of product
pmin, pmax , pmed = np.amin(product), np.amax(product), np.median(product)

print('Min = ' + str(pmin))
print('Max = ' + str(pmax))
print('Med = ' + str(pmed))

#Show the sorted array
plt.plot(product)
plt.show()

在Ubuntu 16.04上使用Python 3.5.2,OpenCV 4.0.1,numpy 1.15.4和matplotlib 3.0.2进行了测试。