OpenCV实现“素描”图像

在学习数字图像处理的过程中学习到图像分割的知识,图像分割包含边缘检测和区域生成。
图从网上随表找的,如侵权请告知删图
把一幅彩色图转换成这种图,可以得知,边界都明显的显示出来,也就是通过边缘检测的方式可以实现该功能。这里我用到的是LoG算子法实现此功能。
边缘检测原理是什么呢,在一个物体内部具有相似性,在边界的地方具有明显的差异。边缘是目标与目标之间,目标与背景之间的界限,图像的局部特性不连续。比如说灰度的突变、纹理结构的突变、颜色的突变。如何将变换方大,让变化明显。在数学中我们可以根据求导就扩大这种变化。但是求导在工程中存在的问题就是求导增大了噪声的影响,所以在进行求导之前加入高斯滤波器进行去噪。Laplacian算子相当于对图像进行求偏导,也就实现了增大这种变化。

      cv::Mat image_RGB = cv::imread("C1.jpg", cv::IMREAD_COLOR);   //read picture
      if(image.empty())
          qDebug()<<"init photo is empty";

      cv::Mat face_WB;

      cvtColor(image_RGB,face_WB,COLOR_BGR2GRAY);
      const int MEDIAN_BLUR_FILTER_SIZE = 5;
      medianBlur(face_WB,face_WB,MEDIAN_BLUR_FILTER_SIZE);

      Mat edges;
      Laplacian(face_WB,edges,CV_8U,5);
      Mat maskk;
      threshold(edges,maskk,100,255,THRESH_BINARY_INV);
      resize(maskk,printImg,Size(600,800));
      cv::imshow("9",printImg);

最终效果图为在这里插入图片描述
由于是边缘点检测,我们可以看到,对于线条的检测不够好,出现了许多斑点状。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用 OpenCV 处理 DICOM 图像,你需要先将 DICOM 文件读入内存中,然后将其转换为 OpenCV Mat 对象。可以使用 pydicom 库来读取 DICOM 文件,然后使用 OpenCV 的 cv2.imread() 函数将其转换为 Mat 对象。 以下是一个简单的示例代码,演示如何读取 DICOM 文件并将其转换为 OpenCV Mat 对象: ```python import cv2 import pydicom # 读取 DICOM 文件 ds = pydicom.dcmread('path/to/dicom/file.dcm') # 将 DICOM 数据转换为 OpenCV Mat 对象 img = ds.pixel_array.astype('uint16') img = cv2.normalize(img, None, 0, 65535, cv2.NORM_MINMAX) img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) ``` 对于将照片转换为素描风格,可以使用 OpenCV 中的 Pencil Sketch 算。该算包括两个步骤:首先将图像转换为灰度图像,然后应用高斯模糊和 Sobel 滤波器来生成素描效果。 以下是一个简单的示例代码,演示如何将照片转换为素描风格: ```python import cv2 # 读取图像 img = cv2.imread('path/to/image.jpg') # 将图像转换为灰度图像 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 应用高斯模糊 gray_blur = cv2.GaussianBlur(gray, (21, 21), 0) # 应用 Sobel 滤波器 sobelx = cv2.Sobel(gray_blur, cv2.CV_64F, 1, 0, ksize=5) sobely = cv2.Sobel(gray_blur, cv2.CV_64F, 0, 1, ksize=5) sobel = cv2.addWeighted(sobelx, 1, sobely, 1, 0) # 反转颜色并应用归一化阈值 sketch = 255 - cv2.threshold(sobel, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1] sketch = cv2.normalize(sketch, None, 0, 255, cv2.NORM_MINMAX) # 显示结果 cv2.imshow('Original', img) cv2.imshow('Sketch', sketch) cv2.waitKey(0) cv2.destroyAllWindows() ``` 这将显示原始图像和转换后的素描图像。你可以调整算的参数来获得不同的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值