如何在OpenCV中锐化图像?

如何使用OpenCV锐化图像? 有许多平滑或模糊的方法,但没有我能看到的锐化。

7个解决方案

147 votes

关于反锐化掩蔽的维基百科文章中列出了一个通用程序:您使用高斯平滑滤波器并从原始图像中减去平滑后的版本(以加权方式,以便恒定区域的值保持不变)。

要获得frame的锐化版本image :(均为cv::Mat)

cv::GaussianBlur(frame, image, cv::Size(0, 0), 3);

cv::addWeighted(frame, 1.5, image, -0.5, 0, image);

您需要为自己调整参数。

还有laplacian锐化,你应该在谷歌上找到一些东西。

etarion answered 2019-08-01T17:08:09Z

28 votes

您可以尝试一个简单的内核和filter2D函数,例如 在Python中:

kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]])

im = cv2.filter2D(im, -1, kernel)

维基百科对内核有一个很好的概述,这里有更多的例子 - [https://en.wikipedia.org/wiki/Kernel_(image_processing)]

在图像处理中,内核,卷积矩阵或掩码是一个小矩阵。 它用于模糊,锐化,压花,边缘检测等。 这是通过在内核和图像之间进行卷积来实现的。

Brian Burns answered 2019-08-01T17:08:48Z

13 votes

您可以在OpenCV文档中使用“非锐化掩码”算法找到有关锐化图像的示例代码。

更改值sigma,threshold,amount将得到不同的结果。

// sharpen image using "unsharp mask" algorithm

Mat blurred; double sigma = 1, threshold = 5, amount = 1;

GaussianBlur(img, blurred, Size(), sigma, sigma);

Mat lowContrastMask = abs(img - blurred) < threshold;

Mat sharpened = img*(1+amount) + blurred*(-amount);

img.copyTo(sharpened, lowContrastMask);

sturkmen answered 2019-08-01T17:09:21Z

2 votes

为了清楚本主题,我们应该做几点:

锐化图像是一个不适定的问题。 换句话说,模糊是一种有损操作,并且从它返回通常是不可能的。

要锐化单个图像,您需要以某种方式添加约束(假设)您想要的图像类型以及它如何变得模糊。 这是自然图像统计的领域。 进行锐化的方法在其算法中明确地或隐含地保存这些统计数据(深度学习是最隐式编码的)。 增加DOG或拉普拉斯金字塔分解的某些级别的常见方法,即Brian Burns答案的推广,假设高斯模糊破坏了图像,加权的方式与假设有关。 在图像中开始。

其他信息来源可以使问题更加清晰。 常见的这种信息源是移动物体的视频或多视图设置。 在该设置中锐化通常被称为超分辨率(这是一个非常糟糕的名称,但它已经停留在学术界)。 很长一段时间以来,OpenCV中一直存在超分辨率的方法....尽管它们通常不能很好地解决实际问题,但最后我检查了它们。 我希望深度学习也能在这里产生一些很好的结果。 也许有人会发表有关那些有价值的评论。

Stefan Karlsson answered 2019-08-01T17:10:10Z

2 votes

任何图像都是各种频率信号的集合。该   较高的频率控制边缘和较低的频率控制   图像内容。 当有急剧过渡时形成边缘   从一个像素值到另一个像素值,如0和255 in   相邻细胞。 显然,有一个急剧的变化,因此边缘   和高频率。 为了锐化图像,可以进行这些过渡   进一步增强。

一种方法是将自制的滤镜内核与图像卷积。

import cv2

import numpy as np

image = cv2.imread('images/input.jpg')

kernel = np.array([[-1,-1,-1],

[-1, 9,-1],

[-1,-1,-1]])

sharpened = cv2.filter2D(image, -1, kernel) # applying the sharpening kernel to the input image & displaying it.

cv2.imshow('Image Sharpening', sharpened)

cv2.waitKey(0)

cv2.destroyAllWindows()

还有另一种从明亮版本中减去图像模糊版本的方法。 这有助于锐化图像。 但是应该谨慎行事,因为我们只是增加像素值。 想象一下灰度像素值190,如果乘以2的权重则生成380,但由于最大允许像素范围而被修剪为255。 这是信息丢失并导致图像褪色。

addWeighted(frame, 1.5, image, -0.5, 0, image);

Ujjwal Saxena answered 2019-08-01T17:10:51Z

1 votes

您可以使用非锐化蒙版锐化图像。 您可以在此处找到有关反锐化掩模的更多信息。 这是使用OpenCV的Python实现:

import cv2 as cv

import numpy as np

def unsharp_mask(image, kernel_size=(5, 5), sigma=1.0, amount=1.0, threshold=0):

"""Return a sharpened version of the image, using an unsharp mask."""

blurred = cv.GaussianBlur(image, kernel_size, sigma)

sharpened = float(amount + 1) * image - float(amount) * blurred

sharpened = np.maximum(sharpened, np.zeros(sharpened.shape))

sharpened = np.minimum(sharpened, 255 * np.ones(sharpened.shape))

sharpened = sharpened.round().astype(np.uint8)

if threshold > 0:

low_contrast_mask = np.absolute(image - blurred) < threshold

np.copyto(sharpened, image, where=low_contrast_mask)

return sharpened

def example():

image = cv.imread('my-image.jpg')

sharpened_image = unsharp_mask(image)

cv.imwrite('my-sharpened-image.jpg', sharpened_image)

Soroush answered 2019-08-01T17:11:16Z

-4 votes

试试这个:

cv::bilateralFilter(img,9,75,75);

您可以在此处找到更多信息

mch answered 2019-08-01T17:11:45Z

opencv 锐化 java_如何在OpenCV中锐化图像?相关推荐

  1. opencv 裁剪 java_如何在opencv java中裁剪检测到的面部图像

    我在 java中使用opencv 2.4.10检测到图像中的面部 我把我的面部检测代码. import org.opencv.core.Core; import org.opencv.core.Mat ...

  2. android怎样添加图片锐化功能,如何在android中锐化图像?

    我想要锐化图像,我的代码如下: public Bitmap RuiHuaBitmap(Bitmap bitmap) { int width, height; height = bitmap.getHe ...

  3. wordpress图像大小_如何在WordPress中添加图像积分(逐步操作)

    wordpress图像大小 Recently, some of our readers asked us about how to properly add image credits in Word ...

  4. ultraedit运行java_如何在UltraEdit中编译和运行Java程序

    如何在UltraEdit中编译和运行Java程序 (2011-07-28 12:33:52) 标签: it 问题提出: 可以毫不夸张地说,JDK+UltraEdit是面向Java初学者的开发工具的绝配 ...

  5. 字符串压缩 java_如何在Java中压缩字符串?

    如何在Java中压缩字符串? 我使用GZIPOutputStream或ZIPOutputStream压缩字符串(我的2222235278130938882小于20),但压缩结果比原始字符串长. 在某个 ...

  6. win7关闭java_如何在WIN7中关闭JAVA自动更新

    在win7系统上面安装了JAVA JRE或JDK后,就会启动一个jusched,它会定时检查更新,每次开机都会推荐更新或者升级,可能有的朋友在win7下无论如何都关不掉java客户端的自动更新,而又不 ...

  7. word中 有注释标签吗_如何在Word中注释图像

    word中 有注释标签吗 If you're writing a document that includes images, you may want to add annotations to t ...

  8. photoshop 裁剪_如何在Photoshop中裁剪图像

    photoshop 裁剪 Cropping photos is one of the most basic, but important, photo editing skills. A crooke ...

  9. cad放大_如何在CAD中对图像分解成线

    下面我们就来看看如何在CAD中怎么把JPG图片插入页面中,并把图片中的图形做出线描的效果呢?这里我们用到CAD编辑工具来对此项功能以演示. 方法/步骤 首先我们要在电脑中安装CAD编辑工具来实现此操作 ...

最新文章

  1. 波士顿动力机器狗在工厂打工的实录火了
  2. 在 ASP.NET 上实现锁定表头、支持滚动的表格的做法
  3. 点到面的战略和银行共生关系的文献总结
  4. SAP 电商云 Spartacus UI 页面的 page guard 是从什么地方解析的
  5. java invoke int long,将Long转换为Integer
  6. JQuery UI AutoComplete 与 Strtus2 结合使用
  7. 前段之BOM ----DOM
  8. 主板故障的分析和诊断
  9. linux安装最新php版本下载地址,服务器配置-使用Linux编译安装PHP指定版本
  10. 我在16ASPX下了一个系统是ACCESS和VS2005做的我想把那个连接数据库的'DB_16aspx'的名字改了进不了了可是?...
  11. 2011-6-22精品软件【清风网络整理】
  12. Springboot的Mybatis拦截器实现
  13. 金狐超级软件盘 07.14更新
  14. Guitar Pro新手入门教程
  15. C++之线程信号量机制
  16. SSO单点登录基本概念实现思路以及小的实例详解
  17. Ubuntu18.04-ROS-Python-通过周立功Can发送16进制整数
  18. 知识蒸馏 综述 Knowledge Distillation: A Survey
  19. Java医院预约挂号系统
  20. 团队项目搜查令更新二

热门文章

  1. 笔记:Smith圆图及其计算
  2. Scrum板与Kanban如何抉择?敏捷工具:opdea板与按照guarbpgz
  3. [QNX_firewall]PF防火墙最详细教程(下)
  4. 黑鲨1 救黑砖 9008救砖
  5. greendao连接mysql_Android数据存储框架GreenDao 3.0使用详解
  6. 项目 Linux 部署 之 配置 PL/SQL Developer 远程连...
  7. vue编程式导航跳转到当前路由多次执行抛出NavigationDuplicated: Avoided redundant navigation to current location:
  8. 什么是马甲APP?寻求高手马甲包封装APP上架
  9. 伯努利朴素贝叶斯【机器学习算法一朴素贝叶斯2】
  10. 《马克思主义基本原理》复习重点