Opencv 簡單的美顏實現方案
阿新 • • 發佈:2019-01-25
實現方法比較簡單,主要實現方案就是先調亮度,再結合高斯模糊與雙邊模糊進行磨皮,最後進行影象增強(非銳化掩蔽方案 ——Unsharpening Mask)。
直接看程式碼以及註釋:
執行過程:void whiteFace(Mat& matSelfPhoto,int alpha, int beta) { for (int y = 0; y < matSelfPhoto.rows; y++) { for (int x = 0; x < matSelfPhoto.cols; x++) { for (int c = 0; c < 3; c++) { matSelfPhoto.at<Vec3b>(y, x)[c] = saturate_cast<uchar>(alpha*(matSelfPhoto.at<Vec3b>(y, x)[c]) + beta); } } } } int main() { Mat matResult; Mat src = imread("C:\\Users\\Administrator\\Desktop\\brightness\\test.jpg"); int bilateralFilterVal = 30; // 雙邊模糊係數 imshow("0000", src); whiteFace(src, 1.1, 68); // 調整對比度與亮度,引數2為對比度,引數3為亮度 imshow("1111", src); GaussianBlur(src, src, Size(9, 9), 0, 0); // 高斯模糊,消除椒鹽噪聲 imshow("2222", src); bilateralFilter(src, matResult, bilateralFilterVal, // 整體磨皮 bilateralFilterVal * 2, bilateralFilterVal / 2); imshow("3333", matResult); Mat matFinal; // 影象增強,使用非銳化掩蔽(Unsharpening Mask)方案。 cv::GaussianBlur(matResult, matFinal, cv::Size(0, 0), 9); cv::addWeighted(matResult, 1.5, matFinal, -0.5, 0, matFinal); imshow("4444", matFinal); imwrite("E:\\test\\result.png", matFinal); waitKey(0); return 0; }