Code một số thao tác đơn giản với xử lí hình ảnh: tăng độ sáng, độ tương phản, đổ màu,...

Đăng bởi : 4/06/2014



thuvienwinform - C# hỗ trợ chúng ta thư viện System.Drawing. Dựa vào đó chúng ta có thể thực hiện một số thao tác cơ bản với hình ảnh như thiết lập độ sáng, độ tương phản, xoay hình ảnh, hay tạo ảnh đen trắng,...Hôm nay mình xin được giới thiệu một số thao tác xử lí hình ảnh đơn giản thông qua lớp Bitmap trong System.Drawing


1. RGB
- Có thể hiểu nó là một bộ 3 số (R, G, B) nằm trong đoạn từ 0 -> 255. Mỗi số đại diện cho màu đỏ (Red - R), Xanh là cây (Green - G), Xanh lam (Blue). Bất kì màu nào cũng có thể được biểu diễn bằng bộ ba số này!
VD:
\
Màu đen: (0, 0, 0)
Màu đỏ: (255, 0, 0)
...
- Với hình ảnh (Image) nó được chia ra thành các pixel (điểm ảnh), mỗi pixel là một bộ ba số theo mô hình RGB này. Số pixcel = (chiều rộng)x(chiều cao).
- Trong C# để xử lí với các pixel này ta sử dụng lớp Bitmap trong System.Drawing (using System.Drawing)
- Cách làm chính là duyệt từng pixel và thực hiện các thao tác mong muốn trên các pixel đó để thu được bức ảnh mong muốn

2. Một số hàm, biến cơ bản
- Khai báo 1 Bitmap:
Bitmap bitmap = new Bitmap(anh);//anh là kiểu Image
Bitmap bitmap = new Bitmap(chieurong, chieucao);//chieucao, chieurong là kích thước của bitmap này
VD
Bitmap bitmap = new Bitmap(200, 200);//ảnh có kích thước 200x200

- Color:
Color c;//Bản ghi color. Khi đó bộ ba số RGB sẽ là: c.R, c.G, c.B
Color.FromArgb(r, g, b);//Lấy màu từ bộ ba số RBG
VD: màu đen
Color.FromArgb(0, 0, 0);//Màu đen
Color.Black;//Màu đen
Color.FromName("Black");//Màu đen

- Lấy màu của 1 pixel:
Color c;
c = bitmap.GetPixel(cot, hang);//cot, hang là tọa độ của pixel cần lấy màu

- Tô màu cho 1 pixel:
 bitmap.SetPixel(cot, hang, Color.FromArgb(r, g, b));//r, g, b là chỉ số RGB

câcsc
3. Thao tác cơ bản:
3.1. Chuyển ảnh về đen trắng (GrayScale):

GrayScale

- Để chuyển một ảnh về đen trắng ta chuyển  chỉ số từng pixel theo công thức: .299 * c.R + .587 * c.G + .114 * c.B

public Bitmap DenTrang(Image anh)
{
    Bitmap kq = new Bitmap(anh.Width, anh.Height);
    Bitmap anhtam = new Bitmap(anh);
    Color c;
    Byte rgb;
    for (int cot = 0; cot < anhtam.Width; cot++)
        for (int hang = 0; hang < anhtam.Height; hang++)
        {
            c = anhtam.GetPixel(cot, hang);
            rgb = (byte)(.299 * c.R + .587 * c.G + .114 * c.B);
            kq.SetPixel(cot, hang, Color.FromArgb(rgb, rgb, rgb));
        }
    return kq;
}


3.2. Chuyển ảnh về âm bản (Invert):

Invert

- Để chuyển ảnh về âm bản ta lấy 255 trừ đi từng chỉ số (làm màu từng pixel ngược lại)



public Bitmap AmBan(Image anh)
{
    Bitmap kq = new Bitmap(anh.Width, anh.Height);
    Bitmap anhtam = new Bitmap(anh);
    Color c;
    for (int cot = 0; cot < anhtam.Width; cot++)
        for (int hang = 0; hang < anhtam.Height; hang++)
        {
            c = anhtam.GetPixel(cot, hang);
            kq.SetPixel(cot, hang, Color.FromArgb(255 - c.R, 255 -  c.G, 255 -  c.B));
        }

    return kq;
}


3.4. Lọc màu (Filter):
Green Filter


- Đề lọc màu (cụ thể là theo 3 màu chính đỏ, xanh lá cây, xanh lam)
+ Màu đỏ: ta giữ nguyên màu đỏ và đảo ngược 2 màu kia (lấy 255 trù đi chỉ số G và B)
+ Tương tự với xanh và xanh lam

public Bitmap ChenMau(Image anh, int mau)
{
    //1 = do; 2 = xanh Green); 3 = xanh (blue)
    Bitmap kq = new Bitmap(anh.Width, anh.Height);
    Bitmap anhtam = new Bitmap(anh);
    Color c;
    int g = 0, r = 0 , b = 0;
    for (int cot = 0; cot < anhtam.Width; cot++)
        for (int hang = 0; hang < anhtam.Height; hang++)
        {
            c = anhtam.GetPixel(cot, hang);
            switch (mau)
            {
                case 1: r = c.R; g = c.G - 255; b = c.B - 255; break;
                case 2: r = c.R - 255; g = c.G; b = c.B - 255; break;
                case 3: r = c.R - 255; g = c.G - 255; b = c.B; break;
            }
            r = Math.Max(r, 0);
            b = Math.Max(b, 0);
            g = Math.Max(g, 0);
            kq.SetPixel(cot, hang, Color.FromArgb(r,g,b));
        }

    return kq;
}



3.5. Ghép 2 hình:
- Đề ghép 2 hình thì ta khai báo một Bitmap có chiều rộng bằng chiều rộng 1 ảnh và chiều cao bằng tổng chiều cao 2 ảnh.
- Sau đó setpixel từng pixel cho bitmap này.
Ngoài ra còn có chỉnh độ sáng (Brightness), chỉnh độ tương phản (Contrast),...các bạn có thể xem thêm
trong code.




{ 3 comments }

  1. Anonymous4/04/2016

    cho mình xin lại link demo đi.link kia die r

    ReplyDelete
  2. Anonymous4/20/2016

    link bản demo die r

    ReplyDelete
  3. Anonymous3/13/2022

    Code Một Số Thao Tác Đơn Giản Với Xử Lí Hình Ảnh: Tăng Độ Sáng, Độ Tương Phản, Đổ Màu,... >>>>> Download Now

    >>>>> Download Full

    Code Một Số Thao Tác Đơn Giản Với Xử Lí Hình Ảnh: Tăng Độ Sáng, Độ Tương Phản, Đổ Màu,... >>>>> Download LINK

    >>>>> Download Now

    Code Một Số Thao Tác Đơn Giản Với Xử Lí Hình Ảnh: Tăng Độ Sáng, Độ Tương Phản, Đổ Màu,... >>>>> Download Full

    >>>>> Download LINK

    ReplyDelete

Nhận ngay 100$ cho VPS

Mua hàng ủng hộ page

Ủng hộ page

Nhãn

Code (45) Team Foundation Server (17) Database (14) News (14) product (13) toolbox (10) Linq (9) SoftDesign (8) XNA (6) API (5) Project (5) item (4)

- Bản quyền thuộc về Thư Viện WinForm - Giao diện: Metrominimalist - Thiết kế: Johanes Djogan -