网站建设会议通知,动易网络 官方网站,企业网站的优点,杭州响应式网站开发一、图像数据类型及转换在skimage中#xff0c;一张图片就是一个简单的numpy数组#xff0c;数组的数据类型有很多种#xff0c;相互之间也可以转换。这些数据类型及取值范围如下表所示#xff1a;Data typeRangeuint80 to 255uint160 to 65535uint320 to 232float-1 to 1 …一、图像数据类型及转换在skimage中一张图片就是一个简单的numpy数组数组的数据类型有很多种相互之间也可以转换。这些数据类型及取值范围如下表所示Data typeRangeuint80 to 255uint160 to 65535uint320 to 232float-1 to 1 or 0 to 1int8-128 to 127int16-32768 to 32767int32-231 to 231 - 1一张图片的像素值范围是[0,255], 因此默认类型是unit8, 可用如下代码查看数据类型from skimage importio,dataimgdata.chelsea()print(img.dtype.name)在上面的表中特别注意的是float类型它的范围是[-1,1]或[0,1]之间。一张彩色图片转换为灰度图后它的类型就由unit8变成了float1、unit8转floatfrom skimage importdata,img_as_floatimgdata.chelsea()print(img.dtype.name)dstimg_as_float(img)print(dst.dtype.name)输出uint8float642、float转uint8from skimage importimg_as_ubyteimportnumpy as npimg np.array([0, 0.5, 1], dtypefloat)print(img.dtype.name)dstimg_as_ubyte(img)print(dst.dtype.name)输出float64uint8float转为unit8有可能会造成数据的损失因此会有警告提醒。除了这两种最常用的转换以外其实有一些其它的类型转换如下表Function nameDescriptionimg_as_floatConvert to 64-bit floating point.img_as_ubyteConvert to 8-bit uint.img_as_uintConvert to 16-bit uint.img_as_intConvert to 16-bit int.二、颜色空间及其转换如前所述除了直接转换可以改变数据类型外还可以通过图像的颜色空间转换来改变数据类型。常用的颜色空间有灰度空间、rgb空间、hsv空间和cmyk空间。颜色空间转换以后图片类型都变成了float型。所有的颜色空间转换函数都放在skimage的color模块内。例rgb转灰度图from skimage importio,data,colorimgdata.lena()graycolor.rgb2gray(img)io.imshow(gray)其它的转换用法都是一样的列举常用的如下skimage.color.rgb2grey(rgb)skimage.color.rgb2hsv(rgb)skimage.color.rgb2lab(rgb)skimage.color.gray2rgb(image)skimage.color.hsv2rgb(hsv)skimage.color.lab2rgb(lab)实际上上面的所有转换函数都可以用一个函数来代替skimage.color.convert_colorspace(arr, fromspace, tospace)表示将arr从fromspace颜色空间转换到tospace颜色空间。例rgb转hsvfrom skimage importio,data,colorimgdata.lena()hsvcolor.convert_colorspace(img,RGB,HSV)io.imshow(hsv)在color模块的颜色空间转换函数中还有一个比较有用的函数是skimage.color.label2rgb(arr), 可以根据标签值对图片进行着色。以后的图片分类后着色就可以用这个函数。例将lena图片分成三类然后用默认颜色对三类进行着色from skimage importio,data,colorimportnumpy as npimgdata.lena()graycolor.rgb2gray(img)rows,colsgray.shapelabelsnp.zeros([rows,cols])for i inrange(rows):for j inrange(cols):if(gray[i,j]0.4):labels[i,j]0elif(gray[i,j]0.75):labels[i,j]1else:labels[i,j]2dstcolor.label2rgb(labels)io.imshow(dst)