C++將圖片轉換爲馬賽克效果

C++將圖片轉換爲馬賽克效果

1. 算法原理

求出每個小方塊內所有像素的顏色平均值,然後用來設置爲該小方塊的顏色。依次處理每個小方塊,即可實現馬賽克效果

原圖
在這裏插入圖片描述

2. 整張圖片處理成馬賽克效果

#include "stdafx.h"
#include <graphics.h>
#define N 8

int main()
{
	//Step1: 加載圖片
	IMAGE image;
	loadimage(&image, L"C:\\test\\image.jpg");
	initgraph(image.getwidth(), image.getheight());    	//用圖片的大小初始化窗口大小
	putimage(0, 0, &image);

	//Step2: 對圖片經行處理
	for (int i = 0; i < image.getheight(); i += N)   	//遍歷整張圖片, 步長爲N, 即將整張圖片分割成若干張N*N大小的小方格,再對每一個N*N的方格依次處理     
		for (int j = 0; j < image.getwidth(); j += N)
		{
			int red = 0, green = 0, blue = 0;
			for (int x = i; x < i + N; x++)       		//遍歷該小方格(大小: N*N)
				for (int y = j; y < j + N; y++)
				{
					COLORREF color = getpixel(y, x);  	//用於獲取該點的顏色
					red += GetRValue(color);         	//提取該點顏色的red值
					green += GetGValue(color);
					blue += GetBValue(color);
				}
			red /= N*N;                         		//求平均
			green /= N*N;
			blue /= N*N;
			setfillcolor(RGB(red, green, blue));  		//將平均後的顏色設置爲當前填充色(只是設置,並沒有填充)
			solidrectangle(j, i, j + N, i + N);         //填充該小方格(開始填充)
		}

	//Step3: 保存處理後的圖片
	saveimage(L"C:\\test\\mosaic.jpg");
	closegraph();
	return 0;
}

效果
在這裏插入圖片描述

3. 通過鼠標選取區域填充馬賽克

#include "stdafx.h"
#include <graphics.h>
#define N 8

int main()
{
	//Step1: 加載圖片
	IMAGE image;
	loadimage(&image, L"C:\\test\\image.jpg");
	initgraph(image.getwidth(), image.getheight());    //用圖片的大小初始化窗口大小
	putimage(0, 0, &image);

	//Step2: 監聽鼠標消息
	MOUSEMSG m;		
	while (true)
	{
		// 獲取一條鼠標消息
		m = GetMouseMsg();

		switch (m.uMsg)
		{
		case WM_MOUSEMOVE:
			if (m.mkLButton)
			{
				//Step3: 對圖片區域處理
				int red = 0, green = 0, blue = 0;
				for (int x = m.y; x < m.y + N; x++)
					for (int y = m.x; y < m.x + N; y++)
					{
						COLORREF color = getpixel(y, x);
						red += GetRValue(color);
						green += GetGValue(color);
						blue += GetBValue(color);
					}
				red /= N * N;
				green /= N * N;
				blue /= N * N;
				setfillcolor(RGB(red, green, blue));
				solidrectangle(m.x, m.y, m.x + N, m.y + N);
			}
			break;

		case WM_LBUTTONDOWN:
			break;

		case WM_RBUTTONUP:
			//Step4: 保存處理後的圖片
			saveimage(L"C:\\test\\mosaic.jpg");
			closegraph();

			return 0;	// 按鼠標右鍵退出程序
		}
	}
	return 0;
}

效果
在這裏插入圖片描述

4. 圖形庫下載鏈接

圖形庫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章