1、把图片黑白化,最粗略的方法,就是图像二值化。Binarize[img]白色变白,黑色变黑,但是,透明的背景却变成了不透明的黑色。
2、把图中大于等于0.66的值,用1代替,否则用0代替。Binarize[img,0.66]
3、然而,上面的所谓的图img的数值,并不是指像素的数值,这可以通过下面的试验确定出来:f[x_]:=If[x<0.鲂番黟谊66,0,1]Attributes[f]={Listable};(f[#]&/@(img//ImageData))//Image上面的自定义函数f的作用,是把小于0.66的数字用0代替,否则用1代替;Attributes[f]={Listable};为函数f赋予了Listable的属性;用f作用于img对应的图片数据的每一个数值,得到新的图片数据,再转化为图片。此时,我们会得到黑白图吗?结果如下。
4、原因很简单,img是三通道的图片,任意像素都有三个不同的像素值,而这三个像素值并不一定同时大于或小于0.66。这从三个通道的灰度图可以看出来:(Image[ImageData[img][[Al造婷用痃l,All,#]]])&/@{1,2,3}下面三幅图,分别是R、G、B三个通道对应的灰度图,颜色越黑,对应的色彩在原图里越深。
5、上面也为我们提供了一个谀薜频扰得到黑白图的方法,那就是分离图片的通道,计算机就会把彩色图转化为灰度图,这其实也是黑白图。于是,我们可以这样考虑:img0=Table[Mean/@(data=ImageData[img])[[n]],{n,1,data//Length,1}]//Image取每一个像素的三个数值的平均值,就得到一个单通道图。
6、如果上面的f作用于此时的图片,就会得到下图:(f[#]&/@(img0//ImageData))//Image
7、这和Binarize[img0,0.66]的效果,好像是一样的。