- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
铅笔风格非写实线描图。
该函数通过图像处理技术将输入的彩色图像转换为两种风格的铅笔素描效果:
- dst1:炭笔效果的灰度图(模拟铅笔线条的明暗对比)。
- dst2:铅笔素描着色图(结合原图色彩信息的素描效果)。
函数原型
cpp
void cv::pencilSketch
(
InputArray src,
OutputArray dst1,
OutputArray dst2,
float sigma_s = 60,
float sigma_r = 0.07f,
float shade_factor = 0.02f
)
参数
- src 输入 8 位 3 通道图像。
- dst1 输出 8 位 1 通道图像。
- dst2 输出图像(与 src 大小和类型相同)。
- sigma_s 取值范围为 0~200。
- sigma_r 取值范围为 0~1。
- shade_factor 取值范围为 0~0.1。
代码示例
cpp
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main() {
Mat src = imread("/media/dingxin/data/study/OpenCV/sources/images/jiangnan.jpg");
if (src.empty()) {
cout << "无法读取图像!" << endl;
return -1;
}
Mat dst1, dst2;
pencilSketch(src, dst1, dst2, 60, 0.07, 0.02); // 使用默认参数
// 或自定义参数:
// pencilSketch(src, dst1, dst2, 30, 0.1, 0.1);
imshow("炭笔效果(dst1)", dst1);
imshow("铅笔素描着色图(dst2)", dst2);
waitKey(0);
return 0;
}
运行结果

参数调整 | 效果变化 |
---|---|
增大 sigma_s | 线条更平滑,细节减少 |
减小 sigma_r | 突出大尺度结构(如轮廓) |
增大 shade_factor | 对比度更高 |