借助opencv庫(kù),實(shí)現(xiàn)將圖片中的陰影去掉,記錄下實(shí)現(xiàn)代碼,如下
+(UIImage*)removeShadow:(UIImage*)processedImage{
cv::Mat src = [MMOpenCVHelper cvMatFromAdjustedUIImage:processedImage];
//1.將圖像轉(zhuǎn)為灰度圖
cv::Mat gray;
cv::cvtColor(src, gray, cv::COLOR_BGR2GRAY);
//定義腐蝕和膨脹的結(jié)構(gòu)化元素和迭代次數(shù)
cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3, 3));
int iteration = 9;
//2.將灰度圖進(jìn)行膨脹操作
cv::Mat dilateMat;
cv::morphologyEx(gray, dilateMat, cv::MORPH_DILATE, element, cv::Point(-1, -1), iteration);
//3.將膨脹后的圖再進(jìn)行腐蝕
cv::Mat erodeMat;
cv::morphologyEx(dilateMat, erodeMat, cv::MORPH_ERODE, element, cv::Point(-1, -1), iteration);
//4.膨脹再腐蝕后的圖減去原灰度圖再進(jìn)行取反操作
cv::Mat calcMat = ~(erodeMat - gray);
//5.使用規(guī)一化將原來背景白色的改了和原來灰度圖差不多的灰色
cv::Mat removeShadowMat;
cv::normalize(calcMat, removeShadowMat, 0, 200, cv::NORM_MINMAX);
//轉(zhuǎn)換成8bit圖像顯示
convertScaleAbs(removeShadowMat, removeShadowMat);
UIImage *resultImage=[MMOpenCVHelper UIImageFromCVMat:removeShadowMat];
return resultImage;
}