代码改变图片背景色

时间:2021-02-04 14:50:58
我有一张证件照的图片想用代码实现将背景由白色改为红色或者黄色,不用其他的程序这个要怎么弄呀

12 个解决方案

#1


怎么没有人来看呀,帮帮忙呀,图片处理我一点都不会呀

#2


假设背景色为白色,改为黑色!!
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    for(int y=0; y<Image1->Height; y++)
    {
      for(int x=0; x<Image1->Width; x++)
        if(Image1->Canvas->Pixels[x][y]==clWhite)
        {
          Image1->Canvas->Pixels[x][y]=clBlack;
        }

    }
}

#3


如果是照片的话,不能像楼上那样简单转换,要识别的是一组相近的颜色,识别时查找RGB各在一定范围内的点,如果是白色就可以选择RGB都大于一个值,然后转换,为了防止误转换(有时人身上也有白色),可以从边缘选择一个点,只转换和这一点直接连通的点。

#4


引用 3 楼 lhylhy 的回复:
如果是照片的话,不能像楼上那样简单转换,要识别的是一组相近的颜色,识别时查找RGB各在一定范围内的点,如果是白色就可以选择RGB都大于一个值,然后转换,为了防止误转换(有时人身上也有白色),可以从边缘选择一个点,只转换和这一点直接连通的点。


就如lhylhy 所说我就是要处理从摄像头取下来的照片,不知道该怎么处理

#5


那位大哥再帮我看一哈呀,我都不知道怎么弄

#6


void __fastcall TForm1::Button1Click(TObject *Sender)
{
    for(int y=0; y<Image1->Height; y++)
    {
      for(int x=0; x<Image1->Width; x++)
        if(Image1->Canvas->Pixels[x][y]>=(TColor)RGB(250,250,250)
            &&Image1->Canvas->Pixels[x][y]<=(TColor)RGB(255,255,255))
        {
          Image1->Canvas->Pixels[x][y]=(TColor)RGB(0,0,0);
        }

    }

}

#7


将图像中的白色色素全部替换成另外的颜色,并不是一个好办法。这样会导致面部等颜色比较浅的部分受到影响。再说回来了,即使是替换像素,也应该用Bitmap的ScanLine,因为Pixels的效率太低了。

#8


6楼还是不成的,你得单独判断RGB三个值,不能作为整体判断,那样会把蓝色当成白色的。

另外就是
应该是像photoshop取色那样,只取相邻的颜色,这样的代码估计maozefa有吧。

#9


妖哥,各位大哥,能给段代码吗,没有弄过图像处理不是很清楚这些的

#10


我对图像处理不精通。阿发伯对这个有研究,你给他发个短消息看看,ID是mazefa

#11


不是mazefa,是 maozefa

#12


恩,少打了一个o 纯属笔误。

#1


怎么没有人来看呀,帮帮忙呀,图片处理我一点都不会呀

#2


假设背景色为白色,改为黑色!!
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    for(int y=0; y<Image1->Height; y++)
    {
      for(int x=0; x<Image1->Width; x++)
        if(Image1->Canvas->Pixels[x][y]==clWhite)
        {
          Image1->Canvas->Pixels[x][y]=clBlack;
        }

    }
}

#3


如果是照片的话,不能像楼上那样简单转换,要识别的是一组相近的颜色,识别时查找RGB各在一定范围内的点,如果是白色就可以选择RGB都大于一个值,然后转换,为了防止误转换(有时人身上也有白色),可以从边缘选择一个点,只转换和这一点直接连通的点。

#4


引用 3 楼 lhylhy 的回复:
如果是照片的话,不能像楼上那样简单转换,要识别的是一组相近的颜色,识别时查找RGB各在一定范围内的点,如果是白色就可以选择RGB都大于一个值,然后转换,为了防止误转换(有时人身上也有白色),可以从边缘选择一个点,只转换和这一点直接连通的点。


就如lhylhy 所说我就是要处理从摄像头取下来的照片,不知道该怎么处理

#5


那位大哥再帮我看一哈呀,我都不知道怎么弄

#6


void __fastcall TForm1::Button1Click(TObject *Sender)
{
    for(int y=0; y<Image1->Height; y++)
    {
      for(int x=0; x<Image1->Width; x++)
        if(Image1->Canvas->Pixels[x][y]>=(TColor)RGB(250,250,250)
            &&Image1->Canvas->Pixels[x][y]<=(TColor)RGB(255,255,255))
        {
          Image1->Canvas->Pixels[x][y]=(TColor)RGB(0,0,0);
        }

    }

}

#7


将图像中的白色色素全部替换成另外的颜色,并不是一个好办法。这样会导致面部等颜色比较浅的部分受到影响。再说回来了,即使是替换像素,也应该用Bitmap的ScanLine,因为Pixels的效率太低了。

#8


6楼还是不成的,你得单独判断RGB三个值,不能作为整体判断,那样会把蓝色当成白色的。

另外就是
应该是像photoshop取色那样,只取相邻的颜色,这样的代码估计maozefa有吧。

#9


妖哥,各位大哥,能给段代码吗,没有弄过图像处理不是很清楚这些的

#10


我对图像处理不精通。阿发伯对这个有研究,你给他发个短消息看看,ID是mazefa

#11


不是mazefa,是 maozefa

#12


恩,少打了一个o 纯属笔误。