大家好我是阿猩学长,今天给大家利用图像处理库opencv来把图片转换为素描的风格。
其中利用的编程语言为C++。
话不多说先给大家看看实际的效果图。
![f66fe0b700552d8218799863f771f08f.png](https://i-blog.csdnimg.cn/blog_migrate/af200a666ea3c9e779a96af1654a6776.jpeg)
原图
![9a5c65460b6bd7cebd3aad4c76e617c0.png](https://i-blog.csdnimg.cn/blog_migrate/5d66022baaddce336dea7ff93c8456f4.jpeg)
处理后的图片
![7c9cc10342d3cbcbfbda1e053e70abe6.png](https://i-blog.csdnimg.cn/blog_migrate/47933567b1394ead5c4f262981996126.jpeg)
原图
![e9058991728005b5634b2b69f48b1fd4.png](https://i-blog.csdnimg.cn/blog_migrate/cbd22ef7e624db793fe5ea416dba8915.jpeg)
效果图
下面先给大家介绍一下大概的编程思路,再结合代码给大家分析
- 首先将彩色图转换成灰度图
- 对灰度图进行求其反色的操作,就是用255减去每个像素的值
- 对第2步得到的结果采用一个高斯模糊的操作
- 采用颜色亮化(color dodge)的技术将第一步的灰度图和第三步操作后的图片进行混合
下面展示这个程序的关键部分代码:
cv::Mat image = cv::imread("filename"); //灰度方式载入图片
cv::Mat image_black = image.clone(); //克隆一份保存,用于后面亮化
cv::Mat image_blur; cv::Mat image_r;
image = 255 - image; //对图片的取反操作
cv::GaussianBlur(image, image_blur,cv::Size2i(25,25),0,0); //用高斯模糊进行处理
image_blur = 255 - image_blur; //高斯模糊处理后的图像在进行取反
cv::divide(image_black, image_blur,image_r,256); //利用divide除法实现图片亮化
cv::imwrite("filename", image_r); //保存图片
cv::imshow("image",image_r);
cv::waitKey();
如果有不懂的,欢迎大家关注我,在下方评论或者私信提问我,我都会为大家一一为解答。