
我没用过Python的Opencv的库,只是用过Python的Image的库;Image库已经可以结果这个问题了
我试着做一下:你先得安装PIL库
得到rgb三个通道,然后转到HSV通道,其中H表示0-255的颜色,V表示强度,你大概先知道紫色的范围是多少
from PIL import Imageimport colorsys
def CalculateH(img):
if len(imggetbands()) == 4:
ir,ig,ib,ia = imgsplit()
else:
ir, ig, ib = imgsplit()
Hdat = []
Sdat = []
Vdat = []
for rd,gn,bl in zip(irgetdata(),iggetdata(),ibgetdata()):
h,l,s = colorsysrgb_to_hsv(rd/255,gn/255,bl/255)
Hdatappend(h)
Sdatappend(l)
Vdatappend(s)
meanV = mean(Vdat)
return Hdat, meanV
def myreadim(filename):
im = Imageopen(filename)
H,V = CalculateH(im)
后面我就懒得写了,应该思路都清楚了吧,要转到其他的颜色通道上,不要在rgb通道上
假设原为“imagejpg”
代码如下:
clc;
clear;
%读入原图像
image = imread('imagejpg');
s = size(image);
%s=[98,97,3],表示image是3个9897的矩阵,分别代表这个图像每个像素点的R、G、B值
%点[30,30]处的RGB数值:
p_r = image(30,30,1);
p_g = image(30,30,2);
p_b = image(30,30,3);
%分别读取RGB
image_r = image(:,:,1);
image_g = image(:,:,2);
image_b = image(:,:,3);
%测试RGB输出
subplot(2,2,1),imshow(image_r),title('Red component');
subplot(2,2,2),imshow(image_g),title('green component');
subplot(2,2,3),imshow(image_g),title('blue component');
subplot(2,2,4),imshow(image),title('original image');
扩展资料:
1、文件的数据,简单地说,就是一个二维数组,二维数组的行对应图像的高,二维数组的列对应图像的宽,二维数组的元素对应图像的像素,二维数组元素的值就是像素的灰度值。
2、彩色空间是用来表示彩色的数学模型,又被称为彩色模型。RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的。
参考资料:
百度百科-imread
难得被人求助一次, 这个必须回答一下 不过你的需求确实没有写得太清楚 根据k值算法出来的是主要颜色有三个, 所以我把三个颜色都打在记事本里了 如果和你的需求有误, 请自行解决吧
另外这里需要用到numpy的库, 希望你装了, 如果没装, 这个直接安装也比较麻烦, 可以看一下portablepython的绿色版。
代码如下:
# -- coding: utf-8 --
import Image
import random
import numpy
class Cluster(object):
def __init__(self):
selfpixels = []
selfcentroid = None
def addPoint(self, pixel):
selfpixelsappend(pixel)
def setNewCentroid(self):
R = [colour[0] for colour in selfpixels]
G = [colour[1] for colour in selfpixels]
B = [colour[2] for colour in selfpixels]
R = sum(R) / len(R)
G = sum(G) / len(G)
B = sum(B) / len(B)
selfcentroid = (R, G, B)
selfpixels = []
return selfcentroid
class Kmeans(object):
def __init__(self, k=3, max_iterations=5, min_distance=50, size=200):
selfk = k
selfmax_iterations = max_iterations
selfmin_distance = min_distance
selfsize = (size, size)
def run(self, image):
selfimage = image
selfimagethumbnail(selfsize)
selfpixels = numpyarray(imagegetdata(), dtype=numpyuint8)
selfclusters = [None for i in range(selfk)]
selfoldClusters = None
randomPixels = randomsample(selfpixels, selfk)
for idx in range(selfk):
selfclusters[idx] = Cluster()
selfclusters[idx]centroid = randomPixels[idx]
iterations = 0
while selfshouldExit(iterations) is False:
selfoldClusters = [clustercentroid for cluster in selfclusters]
print iterations
for pixel in selfpixels:
selfassignClusters(pixel)
for cluster in selfclusters:
clustersetNewCentroid()
iterations += 1
return [clustercentroid for cluster in selfclusters]
def assignClusters(self, pixel):
shortest = float('Inf')
for cluster in selfclusters:
distance = selfcalcDistance(clustercentroid, pixel)
if distance < shortest:
shortest = distance
nearest = cluster
nearestaddPoint(pixel)
def calcDistance(self, a, b):
result = numpysqrt(sum((a - b) 2))
return result
def shouldExit(self, iterations):
if selfoldClusters is None:
return False
for idx in range(selfk):
dist = selfcalcDistance(
numpyarray(selfclusters[idx]centroid),
numpyarray(selfoldClusters[idx])
)
if dist < selfmin_distance:
return True
if iterations <= selfmax_iterations:
return False
return True
# ############################################
# The remaining methods are used for debugging
def showImage(self):
selfimageshow()
def showCentroidColours(self):
for cluster in selfclusters:
image = Imagenew("RGB", (200, 200), clustercentroid)
imageshow()
def showClustering(self):
localPixels = [None] len(selfimagegetdata())
for idx, pixel in enumerate(selfpixels):
shortest = float('Inf')
for cluster in selfclusters:
distance = selfcalcDistance(
clustercentroid,
pixel
)
if distance < shortest:
shortest = distance
nearest = cluster
localPixels[idx] = nearestcentroid
w, h = selfimagesize
localPixels = numpyasarray(localPixels)\
astype('uint8')\
reshape((h, w, 3))
colourMap = Imagefromarray(localPixels)
colourMapshow()
if __name__=="__main__":
from PIL import Image
import os
k_image=Kmeans()
path = r'\\pics\\'
fp = open('file_colortxt','w')
for filename in oslistdir(path):
print path+filename
try:
color = k_imagerun(Imageopen(path+filename))
fpwrite('The color of '+filename+' is '+str(color)+'\n')
except:
print "This file format is not support"
fpclose()
以上就是关于opencv对图像的颜色识别问题,要用python2实现全部的内容,包括:opencv对图像的颜色识别问题,要用python2实现、如何利用matlab导入并提取jpg彩色图像像素点的坐标及其RGB值想要完整的编码。谢谢哈。、用python K值聚类识别图片主要颜色的程序,算法python代码已经有了等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)