使用 OpenCV 将图像文档转换为黑白

2024-03-27

我是 OpenCV 和图像处理的新手,我不知道如何解决我的问题。 我有一张用 iPhone 制作的文档照片,我想将该文档转换为黑白。我尝试使用阈值,但文本不太好(有点模糊且难以阅读)。我希望文本看起来与原始图像相同,只有黑色,背景为白色。我能做些什么? 附:当我对文档的一部分进行拍照时,文本很大,结果还可以。

我将不胜感激任何帮助。

Here are the example image I use and the result: enter image description here enter image description here


我的尝试,也许比你的更具可读性:

IplImage * pRGBImg  = 0;
pRGBImg = cvLoadImage(input_file.c_str(), CV_LOAD_IMAGE_UNCHANGED);
if(!pRGBImg)
{   
    std::cout << "ERROR: Failed to load input image" << std::endl;
    return -1; 
}   

// Allocate the grayscale image
IplImage * pGrayImg = 0;
pGrayImg = cvCreateImage(cvSize(pRGBImg->width, pRGBImg->height), pRGBImg->depth, 1); 

// Convert it to grayscale
cvCvtColor(pRGBImg, pGrayImg, CV_RGB2GRAY);

// Dilate
cvDilate(pGrayImg, pGrayImg, 0, 0.2);

cvThreshold(pGrayImg, pGrayImg, 30, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);
cvSmooth(pGrayImg, pGrayImg, CV_BLUR, 2, 2);

cvSaveImage("out.png", pGrayImg);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 OpenCV 将图像文档转换为黑白 的相关文章

  • 自定义可视化 Web 部件属性 sharepoint

    我在 Visual Studio 2012 中创建可视 Web 部件属性时遇到问题 我被提及http msdn microsoft com en us library ee231551 aspx http msdn microsoft co
  • 类型转换 sockaddr 结构

    我正在尝试学习网络编程 并在这个过程中学习C 我对结构感到困惑sockaddr这是一个通用地址 并且sockaddr in 我的书里是这么说的 因此 我们可以填写 sockaddr in 的字段 然后强制转换 a 指向 它指向 指向 soc
  • VBA 中的 VSTO:AddIn.Object 有时不返回任何内容 (null)

    Given VSTO 插件 An override object RequestComAddInAutomationService 它返回一个名为的类的实例Facade在我的场景中 Excel 2007 中的 VBA 宏可访问AddIn O
  • WPF MVVM将DataTable绑定到DataGrid不显示数据

    我有一个简单的控件 其中包含一个 DataGrid 其中 ItemsSource 绑定到 DataTable 当我填充 DataTable 时 我可以看到 DataGrid 中添加了行 但没有显示任何数据 我没有为此 DataGrid 使用
  • 无法使用 ASP.NET Core 从 JWT 令牌获取声明

    我正在尝试使用 ASP NET Core 实现 JWT 持有者身份验证的非常简单的实现 我从控制器返回的响应有点像这样 var identity new ClaimsIdentity identity AddClaim new Claim
  • C# - 如何将 IntPtr 缓冲区数据保存到文件(最快的方法)?

    我使用此代码将非托管代码中的 IntPtr 缓冲区中的字节保存到文件中 这是一个简单的回调函数 private void callback IntPtr buffer int length byte bytes new byte lengt
  • 无法更新 .mdf 数据库,因为该数据库是只读的(Windows 应用程序)

    我使用 C 创建了一个数据库 Windows 应用程序 我的应用程序在 Windows XP 上成功运行 但在 Vista 或 Windows 7 系统上无法正确执行 我的应用程序显示类似以下内容的消息 无法更新 mdf 数据库 因为该数据
  • Code First - 实体框架 - 如何公开外键

    我有以下数据对象 public class Customer System Data Entity ModelConfiguration EntityTypeConfiguration
  • c#Registry to XML无效字符问题

    我在尝试从注册表创建 XML 文件时遇到问题 在我的笔记本电脑 W7 64b 上它工作正常 生成了 xml 文件 但在另一台计算机 Xp 32b 上抛出异常 System ArgumentException 十六进制值 0x00 是无效字符
  • 我应该使用函数还是无状态函子?

    这两段代码做同样的事情 如您所见 它将用于排序函数 哪个更好 我通常写后一种 但我看到一些程序员像以前那样做 struct val lessthan binary function
  • popen2()在c中如何工作?

    我尝试使用管道 叉子和 dup 在我的程序中执行 md5sume 命令 我发现总和代码运行成功 但我无法理解某些代码行 这是我的代码 int infp outfp char buf 128 if popen2 md5sum infp out
  • Xamarin 无法从异步获取实例

    我编写了一个通过蓝牙连接到 ESP32 的 Xamarin Forms 应用程序 现在我想从 MainPage xaml 页面的 CustomControl JoystickControl 获取值 我已经这样尝试过了 MainPage xa
  • 读取所有进程内存以查找字符串变量c#的地址

    我有 2 个用 C 编写的程序 第一个名为 ScanMe 的程序包含一个包含值 FINDMEEEEEEE 的字符串变量 以及一个值为 1546 22915487 的双精度变量 另一个名为 MemoryScan 的程序读取第一个程序的所有内存
  • 如何带参数调用外部程序?

    我想在我的代码中调用一个 Windows 程序 并使用代码本身确定的参数 我不想调用外部函数或方法 而是调用 WinXP 环境中的实际 exe 或批处理 脚本文件 C 或 C 将是首选语言 但如果使用任何其他语言更容易完成此操作 请告诉我
  • 选择要重写哪个基类的方法

    鉴于以下情况 class Observer public virtual void Observe Parameter p 0 template
  • 修改公共属性的访问修饰符是否是重大更改?

    如果我将公共属性的 setter 的访问修饰符从私有更改为公共 是否会导致引用它的其他程序集发生任何重大更改 UPDATE 这个问题是我 2012 年 1 月博客的主题 https ericlippert com 2012 01 09 ev
  • 在同一条线上铸造两次

    我在项目中看到了这段代码 b的类型是void void b int a int unsigned long b 这条线毫无意义吗 我的意思是 这与a int b在所有情况下 这可能会避免 64 位 Unix 系统上的编译器警告unsigne
  • Yield Return == IEnumerable 和 IEnumerator 吗?

    Is yield return实施的捷径IEnumerable and IEnumerator 是的 您可以在我的书 C in Depth 的第 6 章中找到更多相关信息 幸好第六章是免费提供 http www manning source
  • 如何从标准输入读取一行,阻塞直到找到换行符?

    我试图从命令行的标准输入一次读取任意长度的一行 我不确定是否能够包含 GNU readline 并且更喜欢使用库函数 我读过的文档表明getline应该可以工作 但在我的实验中它不会阻塞 我的示例程序 include
  • 当另一个进程使用 std::fstream 写入文件时从文件读取[重复]

    这个问题在这里已经有答案了 我需要从文件中逐行读取 它是由 std getline 完成的 另一个进程的问题是一直向其附加数据 然后我需要读取新行 例如 文件一开始包含10行 我的程序读取了10行 那么我的程序应该等待 过了一会儿 另一个进

随机推荐

  • 将 ldapjs 与 Bluebird Promise 结合使用

    我在这里发布了类似的内容 使用带有 Promise 的 ldapjs https stackoverflow com questions 30682597 use ldapjs with promise 不幸的是 它仍然没有解决 这次我尝试
  • 查找临时表的列名[重复]

    这个问题在这里已经有答案了 我需要找到列名 of 临时表 如果它是物理表那么我们可以使用sys columns or Information schema columns系统视图来查找列名称 同样 有没有办法找到临时表中存在的列名 SELE
  • 寻找一种简单、简约的方式在云端存储小数据包

    我正在寻找一个非常简单且免费的小数据包云存储 基本上 我想编写一个 Greasemonkey 脚本 用户可以在具有共享数据集的多台计算机上运行该脚本 数据主要只是一个数字 每个用户八个字节就足够了 这一切都归结为以下要求 易于开发 这是一个
  • MATLAB 支持嵌套变量作用域吗?

    MATLAB 可以定义像以下类伪 C 代码那样的变量吗 int a 0 int b c int a 42 b a c a 我们可以使用嵌套函数来 模拟 这一点 我们可以不使用函数来做到这一点吗 我问这个问题是因为我想将一些 C 代码转换为
  • 如何在 MPAndroidChart 中从右向左绘制数据?

    我最近更新了MPAndroid图表 https github com PhilJay MPAndroidChart从1 7 4到2 0 9的库 我忘记了我做了什么自定义折线图以使数据从右到左显示 有人知道吗 我想知道是否有一种方法可以调用来
  • 访客模式示例

    public class Song public string Genre get protected set public string Name get protected set public string Band get prot
  • GUI 被 uibackgroundmodes= voip, audio 困住

    我有基于选项卡栏的应用程序 当我放入 plist UIBackgroundModes 时 我的应用程序应该支持 voip GUI 不会加载 它在启动屏幕上很糟糕 并且不会加载第一个选项卡视图 当我从 info plist 中删除 UIBac
  • UIImage 减少字节大小

    我正在使用以下代码来调整图像大小 一切正常且符合预期 以正确的方式调整 UIImage 的大小 http vocaro com trevor blog 2009 10 12 resize a uiimage the right way 我使
  • 具有 ArrayList 成员变量的不可变对象 - 为什么可以更改该变量?

    我有一个包含各种成员变量的类 有一个构造函数 有 getter 方法 但没有 setter 方法 事实上 这个对象应该是不可变的 public class Example private ArrayList
  • 如何让matplotlib显示所有x坐标?

    例如在下面的代码中 import numpy as np import matplotlib pyplot as plt N 10 x 1 2 3 4 5 6 7 8 9 10 y np random rand N plt scatter
  • Android动态资源加载

    我正在尝试找到一种方法来打开名称仅在运行时确定的资源 更具体地说 我想要一个引用应用程序 apk 中的一堆其他 XML 文件的 XML 为了便于解释 我们假设主要的 XML 是main xml其他 XML 是file1 xml file2
  • 如何在 CSSResource 中使用非标准 CSS 选择器

    我正在尝试在 webkit 中使用滚动条的样式 CSS 选择器如下所示 webkit scrollbar corner webkit scrollbar track piece disabled 等等 当我在 ClientBundle 中使
  • 如何在 Ubuntu 上将 R 版本 3.2.2 降级到版本 3.1.1

    我使用 apt get 安装了它 现在显示 3 2 2 这是一个有问题的版本 如何降级到 3 1 1 Update install packages c batch bitops boot caTools data table doMC d
  • 使用MediaCodec和MediaExtractor对视频进行解码和编码

    我需要将视频解码为一系列位图 以便我能够修改它们 然后将它们压缩回 android 中的视频文件 我计划通过使用来管理这个getFrameAtTime并将其保存到图像序列中 然后我可以修改序列中的图像并将其编码回电影 但我对此有两个问题 首
  • Spark SQL 和时区 - 如何将 unix 时间戳转换为本地化时间戳

    我需要从 Spark DataFrame 将 epoch unix 时间戳列 例如 1509102527 GMT 星期五 2017 年 10 月 27 日 11 08 47 转换为本地化时间戳 以便获取特定时区的本地小时 是否有 Spark
  • Unix 上具有多个读取器的命名管道 (FIFO)

    我有两个程序 Writer 和 Reader 我有一个从写入器到读取器的 FIFO 因此当我向写入器中的标准输入写入内容时 它会从读取器打印到标准输出 我尝试在打开两个 Reader 的情况下执行此操作 并且仅从两个 Reader 程序之一
  • 更改通知标题的颜色 (Android)

    这是我的代码 一切正常 val builder NotificationCompat Builder this NOTI ID setSmallIcon R drawable ic stat name setContentTitle My
  • 双击标题栏时如何知道窗口是否最小化?

    This image is from SystemPreferences gt Appearance 我想知道如何以编程方式获取该值 我问这个问题是因为我正在绘制一个带有自定义标题栏的窗口 并且我希望它 在行为上 尽可能类似于普通 非自定义
  • 如何进行网站容量规划? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我刚读完书容量规划的艺术 https rads stackoverflow com amzn click com 0596518579 顺便说一句 我
  • 使用 OpenCV 将图像文档转换为黑白

    我是 OpenCV 和图像处理的新手 我不知道如何解决我的问题 我有一张用 iPhone 制作的文档照片 我想将该文档转换为黑白 我尝试使用阈值 但文本不太好 有点模糊且难以阅读 我希望文本看起来与原始图像相同 只有黑色 背景为白色 我能做