概念
图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出明显的黑白效果。
函数讲解
●函数原型
○c++
double threshold( InputArray src, OutputArray dst,
double thresh, double maxval, int type )
○Android
double threshold(Mat src, Mat dst, double thresh, double maxval, int type)
●参数解释
○src:源图像Mat对象
○dst:目标图像Mat对象
○thresh:设定的阈值
○maxval:是当灰度值大于(或小于)阈值时将该灰度值赋成的值
○type:二值化的方式,常用的有如下5种。
CV_THRESH_BINARY =0, /**大于阈值的部分被置为255,小于部分被置为0 */
CV_THRESH_BINARY_INV =1, /**大于阈值部分被置为0,小于部分被置为255 */
CV_THRESH_TRUNC =2, /**大于阈值部分被置为threshold,小于部分保持原样 */
CV_THRESH_TOZERO =3, /**小于阈值部分被置为0,大于部分保持不变*/
CV_THRESH_TOZERO_INV =4, /**大于阈值部分被置为0,小于部分保持不变 */
二值化效果图
●原图
![](https://img.haomeiwen.com/i8850933/1f10532111a834fb.png)
●CV_THRESH_BINARY
![](https://img.haomeiwen.com/i8850933/a19bac38f2dd09cd.png)
●CV_THRESH_BINARY_INV
![](https://img.haomeiwen.com/i8850933/976b5afb7a149868.png)
●CV_THRESH_TRUNC
![](https://img.haomeiwen.com/i8850933/dc61e5083428a4bf.png)
●CV_THRESH_TOZERO
![](https://img.haomeiwen.com/i8850933/d91ff11a68c3c432.png)
●CV_THRESH_TOZERO_INV
![](https://img.haomeiwen.com/i8850933/97790e59f95b54f4.png)
函数使用
●c++中
#include<opencv2/opencv.hpp>
using namespace cv;
int main() {
Mat src = imread("C:/Users/Administrator/Desktop/txyzm.png");//引入源图像
if (src.empty()) {
return -1;
}
Mat graySrc,dst;
cvtColor(src, graySrc,CV_BGR2GRAY);//转换为灰度图像
threshold(graySrc, dst, 170, 255, CV_THRESH_BINARY);//图像二值化
imshow("dst", dst);//展示目标图像
waitKey(0);
return 0;
}
●Android中
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_beauty);//获取源图像Bitmap对象
Mat src = new Mat();
Mat dst = new Mat();
Utils.bitmapToMat(bitmap,src);//Bitmap转换为Mat对象
Imgproc.cvtColor(src,dst,Imgproc.COLOR_RGBA2GRAY);//颜色空间转换
Imgproc.threshold(dst,dst,170,255,Imgproc.THRESH_BINARY);//图像二值化
Utils.matToBitmap(dst,bitmap);//Mat转换为Bitmap对象
imageView.setImageBitmap(bitmap);
网友评论