图像二值化(均值法,C语言实现)
2017-07-25 00:00
316 查看
图像二值化就是将【0,255】之间的灰度数据通过门限值(K)变换为{0,255}的一个数据集合
最简单的方法是取值 K = 127,简单粗暴
或者取值 K = avg(pixels) (像素平均值)
JpegDecoder : https://github.com/lzb-cc/JpegCodecs
运行示例
灰度图
K = 127
K = avg(pixels)
最简单的方法是取值 K = 127,简单粗暴
或者取值 K = avg(pixels) (像素平均值)
#include "JpegDecoder.h" #include <stdio.h> #include <opencv2/highgui.hpp> #include <math.h> using namespace JpegCodec; static cv::Mat ConvertToMat(Matrix &mat) { int channel = CV_8UC3; if (mat.channal == 1) channel = CV_8UC1; cv::Mat img(mat.rows, mat.cols, channel); // create a new matrix for (int i = 0; i < mat.rows * mat.cols * mat.channal; i++) { img.data[i] = mat.data[i]; } return img; } ////方案一 K = 127 //void Binary(Matrix &mat) //{ // for (int i = 0; i < mat.rows * mat.cols * mat.channal; i++) // { // if (mat.data[i] < 127) mat.data[i] = 0; // else mat.data[i] = 255; // } //} //// 方案二 K = avg(pixels) //void Binary(Matrix &mat) //{ // int avg = 0; // int cnt = mat.rows * mat.cols * mat.channal; // for (int i = 0; i < cnt; i++) // { // avg += mat.data[i]; // } // avg = avg / cnt; // // for (int i = 0; i < cnt; i++) // { // if (mat.data[i] < avg) mat.data[i] = 0; // else mat.data[i] = 255; // } //} void ShowImage(Matrix &mat) { cv::Mat img = ConvertToMat(mat); cv::imshow("Bitmap", img); } // 图像灰度化 void Gray(Matrix &dst, Matrix &src) { dst.Create(src.rows, src.cols, 1); for (int i = 0; i < src.rows; i++) { for (int j = 0; j < src.cols; j++) { int idx = (i * src.rows + j) * 3; dst.data[idx / 3] = (src.data[idx] + src.data[idx + 1] + src.data[idx + 2]) / 3; } } } int main(int argc, char *arrv[]) { JpegDecoder decoder("01.jpg"); Matrix mat, dst; decoder.Decoder(mat); Gray(dst, mat); Binary(dst); ShowImage(dst); cvWaitKey(0); return 0; }
JpegDecoder : https://github.com/lzb-cc/JpegCodecs
运行示例
灰度图
K = 127
K = avg(pixels)
相关文章推荐
- 图像二值化(迭代法,C语言实现)
- 图像二值化(直方图法,C语言实现)
- c语言实现24位彩色图像二值化
- C语言提高-第26/27讲: 实现线性表基本操作的函数/编写查找和排序函数
- PCA人脸识别学习及C语言实现
- 实现c语言strstr函数功能
- 黑马程序员-c语言-通讯录的实现
- 红黑树(二)之 C语言的实现
- 分离链接散列表实现文件C语言
- leetcode 之Maximum Depth of Binary Tree 用 C语言实现
- 用C语言实现简单的计算器(加、减、乘、除)
- Linux下C语言实现简单Shell
- 10个重要的算法C语言实现源代码
- 线性表之顺序表(C语言实现)
- C语言实现闰年判断
- 离散数学:验证P,Q两个逻辑表达式是否逻辑等价(C语言实现)
- 约瑟夫循环c语言实现 (<<数据结构与算法>>-王曙燕 约瑟夫环问题解答)
- 61单片机项目 - 使用C语言实现A口作为输入口、B口作为输出口
- 数据结构 简单选择排序(C语言实现)
- 深入理解计算机系统中一个echo()函数的C语言实现