就是说在做f2l时讯速找棱块时看到它的其中一个颜色怎么分析出另一个颜色?


图像特征是指可以对图像的特点或内容进行表征的一系列属性的集合,主要包括图像自然特征(如亮度、色彩、纹理等)和图像人为特征(如图像频谱、图像直方图等)。
图像特征提取根据其相对尺度可分为全局特征提取和局部特征提取两类。全局特征提取关注图像的整体表征。常见的全局特征包括颜色特征、纹理特征、形状特征、空间位置关系特征等。局部特征提取关注图像的某个局部区域的特殊性质。一幅图像中往往包含若干兴趣区域,从这些区域中可以提取数量不等的若干个局部特征。
特征特点代表性(可区分性)稳定性独立性
颜色特征是比较简单但是应用较广泛的一种视觉特征。颜色特征往往和图像中包含的对象或场景相关。与其他图像特征相比,颜色特征对图像的尺寸、方向、视角变化的依赖性较小,即相对于图像的尺寸、方向、视角变化具有较好的健壮性。
目前使用的颜色特征主要包括颜色直方图、颜色矩、颜色集、颜色聚合向量以及颜色相关图。
颜色直方图
颜色直方图用于描述图像中像素颜色的数值分布情况,可以反映图像颜色的统计分布和图像的基本色调。颜色直方图仅可表征图像中某一颜色值出现的频数,无法描述图像像素分布的空间位置信息。
任意一幅图像都能唯一给出一幅与它对应的颜色直方图,但不同的图像可能有相同的颜色直方图,因此直方图与图像存在一对多的关系。
一般颜色直方图 cv2.calcHist
颜色直方图是最基本的颜色特征,它反映的是图像中像素颜色值的组成分布,即出现了哪些颜色以及各种颜色出现的概率。假设s(xi)为图像F中某一特定颜色xi的像素个数,则xi像素出现的频率为:整个图像F的一般颜色直方图可以表示为:H(F)=[h(x1),h(x}xb2),…,h(xn)]
方法说明
cv2.calcHist(image,channels,mask,histSize,ranges)参数说明:1、image:原始图像,需要[]括起来2、channel:通道编号,需要[]括起来3、mask:掩膜图像,当统计全局图像,值设为None,统计局部图像的直方图,需要使用到它4、histSize:表示直方图的灰度级数,例如[0,255]一共256级5、range:表示像素值范围[a,b],表示a到b6、accumulate:表示累计标识,默认False,如果设为True,则直方图在开始计算时不会被清零,计算的是多个直方图的累积结果,用于对一组图像计算直方图。参数可选
import matplotlib.pyplot as plt
import cv2 as cv
from skimage import data
img = data.coffee()
hist0 = cv.calcHist([img],[0],None,[256],[0,255])
hist1 = cv.calcHist([img],[1],None,[256],[0,255])
hist2 = cv.calcHist([img],[2],None,[256],[0,255])
全局累加直方图 np.cumsum()
当图像中的颜色值不能取遍所有可能的颜色值时,一般颜色直方图中就会出现一些零值。这些零值的出现会影响相似性的度量,进而会使计算出的相似度不能准确反映图像之间的颜色分布差异。为了弥合一般颜色直方图法的上述缺陷,在一般直方图方法的基础之上,通过对直方图元素进行累加,消除零值影响,形成全局累加直方图。
img = data.coffee()
hist0 = np.cumsum(cv.calcHist([img],[0],None,[256],[0,255]))
hist1 = np.cumsum(cv.calcHist([img],[1],None,[256],[0,255]))
hist2 = np.cumsum(cv.calcHist([img],[2],None,[256],[0,255]))
plt.figure(figsize=(6,6))
plt.plot(range(256),hist0,label = 'R')
plt.plot(range(256),hist1,label = 'G')
plt.plot(range(256),hist2,label = 'B')
plt.legend()
plt.title("累积直方图")
主色调直方图
在一幅图像中,不同颜色值出现的概率不尽相同,且通常情况下少数几种颜色就能涵盖整幅图像的主色调。基于该思想,主色调直方图法会计算出图像中每种颜色出现的频率,选择出现频率最高的几种颜色并将其作为主色调。
总结优点
计算简单,对图像的平移和旋转变换不敏感,能简单描述图像中颜色的全局分布情况。
缺点
无法捕捉(即会丢失)颜色组成之间的空间位置关系。
颜色矩
矩是非常重要的统计量,用于表征数据分布的特点。在统计中,一阶矩表示数据分布的均值,二阶矩表示数据分布的方差,三阶矩表示数据分布的偏移度。
图像的颜色矩用于对图像内的颜色分布进行表征,是比较重要的一种全局图像特征表示。图像的颜色矩特征提取时主要瞄准图像颜色矩中的一阶矩、二阶矩和三阶矩,对于图像而言,这3种统计特征已经足以表达数字图像的颜色分布。相对于颜色直方图特征提取,颜色矩特征提取的优点是无须对颜色特征进行提前量化。
原理
对于数字图像P,其一阶颜色矩的定义为:其中Pij表示数字图像P的第i个图像通道的第j个像素的像素值,N表示图像中像素的个数。
二阶颜色矩的定义为:
三阶颜色矩的定义为:
其中一阶矩可以表征该颜色通道的平均响应强度,二阶矩可以表示该颜色通道的响应方差,三阶矩可以表征该颜色通道数据分布的偏移度。针对彩色图像,图像的颜色矩一共有9个分量,每个颜色通道均有3个低阶矩。
def color_comment(img):
r,g,b = cv.split(img)
color_featrue = []
# 一阶矩
r_mean = np.mean(r)
g_mean = np.mean(g)
b_mean = np.mean(b)
# 二阶矩
r_std = np.std(r)
g_std = np.std(g)
b_std = np.std(b)
#三阶矩
r_offset = (np.mean(np.abs((r - r_mean)**3)))**(1./3)
g_offset = (np.mean(np.abs((g - g_mean)**3)))**(1./3)
b_offset = (np.mean(np.abs((b - b_mean)**3)))**(1./3)
color_featrue.extend([r_mean,g_mean,b_mean,r_std,g_std,b_std,r_offset,g_offset,b_offset])
return color_featrue
print(color_comment(img))
[158.5690875, 85.794025, 51.48475, 62.9728671221504, 60.958103707650785, 52.93569362069574, 73.2849737717244, 69.97427088321201, 67.60422322535385]
颜色矩的特点:图像的颜色矩有9个分量(3个颜色通道,每个通道上3个低阶矩);与其他颜色特征相比非常简洁;分辨力较弱;颜色矩一般和其他特征结合使用,可以起到缩小范围的作用。
颜色聚合向量参考
针对颜色直方图和颜色矩无法表达图像色彩的空间位置的缺点,有人提出了图像的颜色聚合向量。
其核心思想是将属于颜色直方图的每个颜色量化区间的像素分为两部分,如果该颜色量化区间中的某些像素占据的连续区域的面积大于指定阈值,则将该区域内的像素作为聚合像素,否则作为非聚合像素。
颜色聚合向量可表示为<(α1,β1),(αn,βn)>,其中αi与βi分别代表颜色直方图的第i个颜色量化区间中的聚合像素和非聚合像素的数量。颜色聚合向量除了包含颜色频率信息外,也包含颜色的部分空间分布信息,因此其可以获得比颜色直方图更好的表示效果。
步骤1、量化
颜色聚合向量算法的第一步与求普通的颜色直方图类似,即对图像进行量化处理。一般采用均匀量化处理方法,量化的目标是使图像中只保留有限个颜色区间。
2、连通区域划分
针对重新量化后的像素值矩阵,根据像素间的连通性把图像划分成若干个连通区域。
3、判断聚合性
统计每个连通区域中的像素数目,根据设定的阈值判断该区域中的像素是聚合的,还是非聚合,得出每个颜色区间中聚合像素和非聚合像素的数量αi和βi。
4、 聚合向量形成
图像的聚合向量可以表示为〈(α1,β1),(αn,βn)〉
颜色相关图
颜色相关图是图像颜色分布的另外一种表达方式。颜色相关图不仅可以显示像素在图像中的占比,也可以反映不同颜色对间的空间位置的相关性。颜色相关图利用颜色对间的相对距离分布来描述空间位置信息。
原理
颜色相关图是一张用颜色对<i,j>索引的表,其中<i,j>的第k个分量表示颜色为c(i)的像素和颜色为c(j)的像素之间的距离等于k的概率。设I表示整张图像的全部像素,Ic(i)表示颜色为c(i)的所有像素,则图像的颜色相关图可以表达为:
p1-p2|表示像素p1和p2之间的距离
def is_vaild(X,Y,point): #判断像素分布点是否超出图像范围,超出返回False
if point[0] < 0 or point[0] >= X:
return False
if point[1] < 0 or point[1] >= Y:
return False
return True
def getNeighbors(X,Y,x,y,dist):
# 输入图片的一个像素点的位置,返回它的8邻域
cn1 = (x+dist,y+dist)
cn2 = (x+dist,y)
cn3 = (x+dist,y-dist)
cn4 = (x,y-dist)
cn5 = (x-dist,y-dist)
cn6 = (x-dist,y)
cn7 = (x-dist,y+dist)
cn8 = (x,y+dist)
point = (cn1,cn2,cn3,cn4,cn5,cn6,cn7,cn8)
Cn = []
for i in point:
if is_vaild(X,Y,i):
Cn.append(i)
return Cn
def corrlogram(img,dist):
xx,yy,tt = img.shape
cgram = np.zeros((256,256),np.uint8)
for x in range(xx):
for y in range(yy):
for t in range(tt):
color_i = img[x,y,t]
# X的某一个通道的像素值
neighbors_i = getNeighbors(xx,yy,x,y,dist)
for j in neighbors_i:
j0 = j[0]
j1 = j[1]
color_j = img[j0,j1,t]
#X的某一个邻域像素点的某一个通道的像素值
cgram[color_i,color_j] +=
1
#统计像素值i核像素值j的个数
return cgram
crgam = corrlogram(img,4)
# 4
plt.imshow(crgam)
plt.show()
}
一、特征提取:颜色特征对图像颜色特征的提取主要有两种算法:量化颜色直方图和聚类颜色直方图量化颜色直方图以单元(bin)由单元中心代表,统计落在量化单元的像素数量优势:计算高效劣势:量化问题、稀硫聚类颜色直方图Lab操作:使用聚类法对所有依点色向量进行米类,单元(bin)由聚类中心代表优势:考虑了图颜色特征在整个空间的分布情况,避免出现大量bin中像素量非常稀硫的情况劣势:两幅直方图相近的图像,只错开个bin,采用1距高或欧拉距高计算会得到很小的相似度解决:考虑相似但不相同的颜色之间的相似度,一种足二次式距离,二足事先対图像进行平滑过滤,每个bin对相邻bin也有贡献二、python以下图为例:OpenCV-Python中调用的直方图计算函数为cv2.calcHist代码:import cv2
import numpy as np
import matplotlib.pyplot as plt
def calcAndDrawHist(image, color):
hist= cv2.calcHist([image], [0], None, [256], [0.0,255.0])
minVal, maxVal, minLoc, maxLoc = cv2.minMaxLoc(hist)
histImg = np.zeros([256,256,3], np.uint8)
hpt = int(0.9* 256);
for h in range(256):
intensity = int(hist[h]*hpt/maxVal)
cv2.line(histImg,(h,256), (h,256-intensity), color)
return histImg
if __name__ == '__main__':
original_img = cv2.imread("cat.jpg")
img = cv2.resize(original_img,None,fx=0.6,fy=0.6,interpolation = cv2.INTER_CUBIC)
b, g, r = cv2.split(img)
histImgB = calcAndDrawHist(b, [0, 0, 255])
histImgG = calcAndDrawHist(g, [0, 255, 0])
histImgR = calcAndDrawHist(r, [255, 0, 0])
plt.title('histImgB')
plt.imshow(histImgB)
plt.show()
plt.imshow(histImgG)
plt.title('histImgG')
plt.show()
plt.imshow(histImgR)
plt.title('histImgR')
plt.show()
plt.imshow(img)
plt.title('Img')
plt.show()
聚类颜色直方图:参考文献:https://blog.csdn.net/wsp_1138886114/article/details/80660014三、matlab代码:close all
clear all
clc
blockSize=15;
%每个block为15个像素
w0=0.6;
t0=0.1;
% A=200;
I=imread('./cat.jpg');
h = figure;
set(gcf,'outerposition',get(0,'screensize'));%获得SystemScreenSize 传递给当前图像句柄gcf的outerposition属性
subplot(221) %表示2(行数)*2(列数)的图像,1代表所画图形的序号
imshow(I);
title('Original Image');
subplot(222);
grayI=rgb2gray(I);
imshow(grayI,[]);
title('原图像灰度图')
subplot(223);
imhist(grayI,64);
%统计<50的像素所占的比例
%%%%%%%%%%%%%%%%%%%%%%
[COUNT x]=imhist(grayI);
under_50=0;
for i=0:50
under_50=under_50+COUNT(x==i);
end
under_50
total=size(I,1)*size(I,2)*size(I,3);
percent=under_50/total
percent
%%%%%%%%%%%%%%%%%%%%%%
function RGB_hist = RGB_Color_Histogram(f,r_n,g_n,b_n)
%
计算RGB图像的颜色直方图
%
参数列表中,f表示读取的RGB图像,r_n表示红色分量等分的份数,g_n表示绿色分量等分的份数,b_n表示蓝色分量等分的份数
%
彩色直方图共有r_n*g_n*b_n个bin,已知某像素颜色为(x1,x2,x3),则其在彩色直方图的第几个bin可以用以下公式计算:
%
i_bin=x1*g_n*b_n+x2*b_n+x3+1
%
已知彩色直方图的第i个bin,则其对应的像素彩色可用以下公式计算:
%
x1=fix(i/(g_n*b_n))
%
x2=fix((i-x1*g_n*b_n)/b_n)
%
x3=i-x1*g_n*b_n-x2*b_n-1
%
将图像转换为double类型,取值空间[0,1]
f=im2double(f);
%
取得红绿蓝三个颜色的分量
f_r=f(:,:,1);
f_g=f(:,:,2);
f_b=f(:,:,3);
%
对红绿蓝三个颜色的分量进行量化,取值在[0,等分份数-1]
f_r=fix(f_r*r_n);
f_g=fix(f_g*g_n);
f_b=fix(f_b*b_n);
%
对于超出量化区间的(也就是量化的颜色值等于等分份数的),进行减一操作,归于最大量化数(也即等分份数-1)
f_r=f_r-(f_r==r_n);
f_g=f_g-(f_g==g_n);
f_b=f_b-(f_b==b_n);
%
初始化直方图
RGB_hist = zeros(r_n*g_n*b_n,1);
%
对每个像素的颜色值进行编码,按照i_bin=x1*g_n*b_n+x2*b_n+x3+1进行计算
temp = f_r*g_n*b_n+f_g*b_n+f_b+1;
%
统计颜色值落入第i个bin的像素个数
for
i=1:r_n*g_n*b_n
RGB_hist(i)=length(find(temp==i));
end
}

原文介绍:
This example demonstrates an application from the pharmaceutical industry. The task is to check the content of automatically filled blisters. The first image (reference) is used to locate the chambers within a blister shape as a reference model, which is then used to realign the subsequent images along to this reference shape. Using blob analysis the content of each chamber is segmented and finally classified by a few shape features.
这个例子演示了一个制药行业的应用程序。任务是检查自动填充的水泡的内容。第一幅图像(参考)用于定位气泡形状内的腔室作为参考模型,然后使用该参考模型重新排列随后的图像以达到该参考形状。采用斑点分析法对每个腔体的内容进行分割,最后通过一些形状特征对其进行分类。
1. 效果展示利用一个标准图像做模板,检测药片的有无、错误模板图与检测图结果2. 思路分析
利用参考图建立每个药片的位置模型
分割出前景区域计算其旋转,刚性映射变换摆正确定目标区域,并计算得到其中心与偏转角,用于对检测图像进行刚性矫正矫正检测图像,确定检测区域
分割出前景区域计算其旋转、中心利用参考图的中心与偏角对检测区域进行刚性变换利用模板区域分割出检测区域对检测区域进行定性分析,分类2.1 利用参考图建立每个药片的位置模型* 取第一个通道数据
access_channel (ImageOrig, Image1, 1)
* 进行阈值分割,得到前景区域
threshold (Image1, Region, 90, 255)
shape_trans (Region, Blister, 'convex')
* 计算偏角
orientation_region (Blister, Phi)
* 计算中心与面积
area_center (Blister, Area1, Row, Column)
* 生成刚性仿射变换矩阵
vector_angle_to_rigid (Row, Column, Phi, Row, Column, 0, HomMat2D)
* 仿射变换,摆正图像
affine_trans_image (ImageOrig, Image2, HomMat2D, 'constant', 'false')
* 生成药片区域,这个数值是自己判断的
gen_empty_obj (Chambers)
for I := 0 to 4 by 1
Row := 88 + I * 70
for J := 0 to 2 by 1
Column := 163 + J * 150
gen_rectangle2 (Rectangle, Row, Column, 0, 64, 30)
concat_obj (Chambers, Rectangle, Chambers)
endfor
endfor
* 对区域也进行仿射变换
affine_trans_region (Blister, Blister, HomMat2D, 'nearest_neighbor')
* 作差生成检测区域
difference (Blister, Chambers, Pattern)
* 组合区域
union1 (Chambers, ChambersUnion)
* 再次计算偏角和中心,这用于对后边待检测图像进行矫正
orientation_region (Blister, PhiRef)
PhiRef := rad(180) + PhiRef
area_center (Blister, Area2, RowRef, ColumnRef)
2.2 矫正检测图像* 在待检测图像中分割出前景区域
threshold (Image, Region, 90, 255)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 5000, 9999999)
shape_trans (SelectedRegions, RegionTrans, 'convex')
* 对图像进行仿射变换,向参考图像矫正
orientation_region (RegionTrans, Phi)
area_center (RegionTrans, Area3, Row, Column)
vector_angle_to_rigid (Row, Column, Phi, RowRef, ColumnRef, PhiRef, HomMat2D)
affine_trans_image (Image, ImageAffineTrans, HomMat2D, 'constant', 'false')
2.3 分割检测区域并优化* 依靠模板区域分割出检测区域
reduce_domain (ImageAffineTrans, ChambersUnion, ImageReduced)
* 通道分离
decompose3 (ImageReduced, ImageR, ImageG, ImageB)
* 自动阈值化
var_threshold (ImageB, Region, 7, 7, 0.2, 2, 'dark')
* 处理优化检测区域
connection (Region, ConnectedRegions0)
closing_rectangle1 (ConnectedRegions0, ConnectedRegions, 3, 3)
fill_up (ConnectedRegions, RegionFillUp)
select_shape (RegionFillUp, SelectedRegions, 'area', 'and', 1000, 99999)
opening_circle (SelectedRegions, RegionOpening, 4.5)
connection (RegionOpening, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 1000, 99999)
shape_trans (SelectedRegions, Pills, 'convex')
2.4 对每个位置分类* 计算检测区域的数量
count_obj (Chambers, Number)
gen_empty_obj (WrongPill)
gen_empty_obj (MissingPill)
* 检测位置面积为0表示缺失,面积或者最小值不正常说明错误
for I := 1 to Number by 1
select_obj (Chambers, Chamber, I)
intersection (Chamber, Pills, Pill)
area_center (Pill, Area, Row1, Column1)
if (Area > 0)
min_max_gray (Pill, ImageB, 0, Min, Max, Range)
if (Area < 3800 or Min < 60)
concat_obj (WrongPill, Pill, WrongPill)
endif
else
concat_obj (MissingPill, Chamber, MissingPill)
endif
endfor
3. 完整代码* This example demonstrates an application from the pharmaceutical
* industry. The task is to check the content of automatically filled
* blisters. The first image (reference) is used to locate the chambers
* within a blister shape as a reference model, which is then used to
* realign the subsequent images along to this reference shape. Using
* blob analysis the content of each chamber is segmented and finally
* classified by a few shape features.
*
dev_close_window ()
dev_update_off ()
read_image (ImageOrig, 'blister/blister_reference')
dev_open_window_fit_image (ImageOrig, 0, 0, -1, -1, WindowHandle)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
dev_set_draw ('margin')
dev_set_line_width (3)
*
* In the first step, we create a pattern to cut out the chambers in the
* subsequent blister images easily.
access_channel (ImageOrig, Image1, 1)
threshold (Image1, Region, 90, 255)
shape_trans (Region, Blister, 'convex')
orientation_region (Blister, Phi)
area_center (Blister, Area1, Row, Column)
vector_angle_to_rigid (Row, Column, Phi, Row, Column, 0, HomMat2D)
affine_trans_image (ImageOrig, Image2, HomMat2D, 'constant', 'false')
gen_empty_obj (Chambers)
for I := 0 to 4 by 1
Row := 88 + I * 70
for J := 0 to 2 by 1
Column := 163 + J * 150
gen_rectangle2 (Rectangle, Row, Column, 0, 64, 30)
concat_obj (Chambers, Rectangle, Chambers)
endfor
endfor
affine_trans_region (Blister, Blister, HomMat2D, 'nearest_neighbor')
difference (Blister, Chambers, Pattern)
union1 (Chambers, ChambersUnion)
orientation_region (Blister, PhiRef)
PhiRef := rad(180) + PhiRef
area_center (Blister, Area2, RowRef, ColumnRef)
*
*
* Each image read will be aligned to this pattern and reduced to the area of interest,
* which is the chambers of the blister
Count := 6
for Index := 1 to Count by 1
read_image (Image, 'blister/blister_' + Index$'02')
threshold (Image, Region, 90, 255)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 5000, 9999999)
shape_trans (SelectedRegions, RegionTrans, 'convex')
*
* Align pattern along blister of image
orientation_region (RegionTrans, Phi)
area_center (RegionTrans, Area3, Row, Column)
vector_angle_to_rigid (Row, Column, Phi, RowRef, ColumnRef, PhiRef, HomMat2D)
affine_trans_image (Image, ImageAffineTrans, HomMat2D, 'constant', 'false')
*
* Segment pills
reduce_domain (ImageAffineTrans, ChambersUnion, ImageReduced)
decompose3 (ImageReduced, ImageR, ImageG, ImageB)
var_threshold (ImageB, Region, 7, 7, 0.2, 2, 'dark')
connection (Region, ConnectedRegions0)
closing_rectangle1 (ConnectedRegions0, ConnectedRegions, 3, 3)
fill_up (ConnectedRegions, RegionFillUp)
select_shape (RegionFillUp, SelectedRegions, 'area', 'and', 1000, 99999)
opening_circle (SelectedRegions, RegionOpening, 4.5)
connection (RegionOpening, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 1000, 99999)
shape_trans (SelectedRegions, Pills, 'convex')
*
* Classify segmentation results and display statistics
count_obj (Chambers, Number)
gen_empty_obj (WrongPill)
gen_empty_obj (MissingPill)
for I := 1 to Number by 1
select_obj (Chambers, Chamber, I)
intersection (Chamber, Pills, Pill)
area_center (Pill, Area, Row1, Column1)
if (Area > 0)
min_max_gray (Pill, ImageB, 0, Min, Max, Range)
if (Area < 3800 or Min < 60)
concat_obj (WrongPill, Pill, WrongPill)
endif
else
concat_obj (MissingPill, Chamber, MissingPill)
endif
endfor
*
dev_clear_window ()
dev_display (ImageAffineTrans)
dev_set_color ('forest green')
count_obj (Pills, NumberP)
count_obj (WrongPill, NumberWP)
count_obj (MissingPill, NumberMP)
dev_display (Pills)
if (NumberMP > 0 or NumberWP > 0)
disp_message (WindowHandle, 'Not OK', 'window', 12, 12 + 600, 'red', 'true')
else
disp_message (WindowHandle, 'OK', 'window', 12, 12 + 600, 'forest green', 'true')
endif
*
Message := '# Correct pills: ' + (NumberP - NumberWP)
Message[1] := '# Wrong pills
:
' + NumberWP
Message[2] := '# Missing pills:
' + NumberMP
*
Colors := gen_tuple_const(3,'black')
if (NumberWP > 0)
Colors[1] := 'red'
endif
if (NumberMP > 0)
Colors[2] := 'red'
endif
disp_message (WindowHandle, Message, 'window', 12, 12, Colors, 'true')
dev_set_color ('red')
dev_display (WrongPill)
dev_display (MissingPill)
if (Index < Count)
disp_continue_message (WindowHandle, 'black', 'true')
endif
stop ()
endfor
}

我要回帖

更多关于 色相环12色的圈怎么分 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信