opencv对图像的颜色识别问题,要用python2实现

opencv对图像的颜色识别问题,要用python2实现,第1张

我没用过Python的Opencv的库,只是用过Python的Image的库;Image库已经可以结果这个问题了

我试着做一下:你先得安装PIL库

得到rgb三个通道,然后转到HSV通道,其中H表示0-255的颜色,V表示强度,你大概先知道紫色的范围是多少

from PIL import Image

import 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代码已经有了等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9782709.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存