对灰度图像进行二值化,传入的图片是手写汉字的截图,通过二值化把字的部分提出来。用ostu进行二值化

#include <stdio.h>
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <stdio.h>
#include<stack>
using namespace std;
using namespace cv;
#include <fstream> #include <sys/uio.h>
#include <dirent.h> int main()
{ struct dirent *dirp;
DIR* dir = opendir("/Users/tanchao/Documents/c++work/myopencv5/myopencv5/image"); //int blockSize = 25;
//int constValue = 10;
while ((dirp = readdir(dir)) != nullptr)
{
if (dirp->d_type == DT_REG &&string(dirp->d_name)!=".DS_Store")//.DS_Store是Mac中隐藏文件,记录这个文件夹的属性,所以我们要跳过这个文件
{
Mat g_srcImage;
g_srcImage = imread("/Users/tanchao/Documents/c++work/myopencv5/myopencv5/image/"+string(dirp->d_name),);//第二个参数0表示灰度图读取
//imshow("test",g_srcImage);
Mat changeMat = Mat::zeros(cv::Size(g_srcImage.cols, g_srcImage.rows), CV_8UC1);//修改之后的图片
for(int i=;i<g_srcImage.rows;i++)
{
for(int j=;j<g_srcImage.cols;j++)
{ //if(int(g_srcImage.at<uchar>(i,j))>150)
//changeMat.ptr<uchar>(i)[j] = 255;
//else
//changeMat.ptr<uchar>(i)[j] = int(g_srcImage.at<uchar>(i,j));
//cout<<int(g_srcImage.at<uchar>(i,j))<<" ";
//adaptiveThreshold(g_srcImage, changeMat, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY_INV, blockSize, constValue); threshold(g_srcImage, changeMat, , , CV_THRESH_OTSU); }
//cout << "\n"<<endl;
}
cout<<"/Users/tanchao/Documents/c++work/myopencv5/myopencv5/change/"+string(dirp->d_name)<<endl;
imwrite("/Users/tanchao/Documents/c++work/myopencv5/myopencv5/quanjuyuzhi/"+string(dirp->d_name),changeMat);//加了用来截图
}
}
closedir(dir);
waitKey();
return ; }

其实也可以用自适应二值化和自己设定阈值进行二值化,具体的可以根据代码中注释部分进行修改。

Mac中opencv批量对图片进行二值化的更多相关文章

  1. OpenCV图像的二值化

    图像的二值化: 与边缘检测相比,轮廓检测有时能更好的反映图像的内容.而要对图像进行轮廓检测,则必须要先对图像进行二值化,图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出 ...

  2. OpenCV中对图像进行二值化的关键函数——cvThreshold()。

    函数功能:采用Canny方法对图像进行边缘检测 函数原型: void cvThreshold( const CvArr* src, CvArr* dst, double threshold, doub ...

  3. opencv python 图像二值化/简单阈值化/大津阈值法

    pip install matplotlib 1简单的阈值化 cv2.threshold第一个参数是源图像,它应该是灰度图像. 第二个参数是用于对像素值进行分类的阈值, 第三个参数是maxVal,它表 ...

  4. 基于Java对图片进行二值化处理

    一直以来对Java的图形处理能力表无力,但好像又不是那么一回事,之前用PHP做过一些应用,涉及到验证码的识别,其中有个图片二值化的步骤,今天换成Java来实现下 在java的扩展包javax.imag ...

  5. 10、OpenCV Python 图像二值化

    __author__ = "WSX" import cv2 as cv import numpy as np #-----------二值化(黑0和白 255)---------- ...

  6. opencv中对图片的二值化操作并提取特定颜色区域

    一.最近因为所在的实习公司要求用opencv视觉库来写一个对图片识别并提取指定区域的程序.看了很多资料,只学会了皮毛,下面附上简单的代码.运行程序之前需要安装opencv库,官网地址为:https:/ ...

  7. opencv图像二值化的函数cvThreshold()。 cvAdaptiveThreshol

    OpenCV中对图像进行二值化的关键函数——cvThreshold(). 函数功能:采用Canny方法对图像进行边缘检测 函数原型: void cvThreshold( const CvArr* sr ...

  8. 实现图像的二值化(java+opencv)

    书里的解释: 其他的没找到什么资料,直接参考百度百科 https://baike.baidu.com/item/%E5%9B%BE%E5%83%8F%E4%BA%8C%E5%80%BC%E5%8C%9 ...

  9. 深度学习实践-强化学习-bird游戏 1.np.stack(表示进行拼接操作) 2.cv2.resize(进行图像的压缩操作) 3.cv2.cvtColor(进行图片颜色的转换) 4.cv2.threshold(进行图片的二值化操作) 5.random.sample(样本的随机抽取)

    1. np.stack((x_t, x_t, x_t, x_t), axis=2)  将图片进行串接的操作,使得图片的维度为[80, 80, 4] 参数说明: (x_t, x_t, x_t, x_t) ...

随机推荐

  1. GitHub万星的ML算法面试大全

    项目地址:https://github.com/imhuay/Algorithm_Interview_Notes-Chinese 如下所示为整个项目的结构,其中从机器学习到数学主要提供的是笔记与面试知 ...

  2. CF 966E May Holidays

    /* 考虑对于询问分块, 每根号n个询问做一次 考虑一次询问, 我们建立出虚树来每条链上的更改一定是一样的, 然后会有根号条链 对于每条链上的点按照w基数排序并且合并相同, 然后每次更改 就是一个指针 ...

  3. linux设置服务器时间同步

    yum install -y rdate 服务器请设置 */5 * * * * /usr/bin/rdate -s time-b.nist.gov ubuntu 设定时区:dpkg-reconfigu ...

  4. MySQL管理工具HeidiSQL

    MySQL管理工具HeidiSQL   HeidiSQL 是一个功能非常强大的 MySQL 客户端软件.它是德国程序员Ansgar Becker和几个Delphi程序员开发的一个开源工具.要通过Hei ...

  5. WPF GridLinesVisibility属性

    GridLinesVisibility:网格线可见性样式,其值有四种:All,Horizontal,None,Vertical.对应:全部,水平,没有,垂直 <!--#region 表格--&g ...

  6. Linux free -m 详解命令

    如下显示free是显示的当前内存的使用,-m的意思是M字节来显示内容.我们来一起看看. 1 2 3 4 5 6 $ free -m                total       used    ...

  7. python中的swapcase

    swapcase()将字符串中的字母小写变大写.大写变小写,举个例子: 1 a = "hELLO wORLD" 2 a1 = a.swapcase() 3 print(a1) 输出 ...

  8. Address already in use: JVM_Bind 端口被占用的几个解决办法

    运行Tomcat时若出现Address already in use: JVM_Bind 端口被占用,一般使用下面几个办法可以解决: 假设端口为1099 1.启动cmd, 执行命令netstat -a ...

  9. hasattr getattr setattr delattr --> (反射)

    class Room: def __init__(self,name): self.name = name def big_room(self): print('bigroot') R = Room( ...

  10. js检查字符串的包含关系

    首先想到的是str.contains(),用的时候发现报错了 正确的判断方法应该用:str.indexof(substring),不包含的话,返回-1.大小写敏感 var rsp = response ...