二、使用OpenCV:打开、显示、存储、缩放、降采样、降灰度分辨率

点击链接→【数字图像处理】简单实践汇总

1. 打开、显示、存储图像

  • imread(“图像路径”);
  • imshow(“窗口名称”,图像名称);
  • imwrite(“保存路径”,图像名称);
//打开图像
Mat srcImage = imread("jpg/Lena.jpg");

//显示图像
imshow("原图", srcImage);

//存储图像
imwrite("jpg/Lena_save.jpg", srcImage);

效果

2. 缩放、降采样

  • Mat(宽,高,类别);//Mat的一种构造函数,宽即cols,高即rows,很容易搞混;

  • CV_8UC3的含义:

    • 8:每个像素点在内存空间所占的空间大小8位;
    • U:unsigned int,无符号整型;
    • C3:带Alpha通道的RGB彩色图像,即四通道图像;
  • 用deImage.at(i, j) = pixel;给像素点赋值;注意彩色的要用,黑白的用;

    • pixel[0] //Blue
    • pixel[1] //Green
    • pixel[2] //Red
  • 循环是原图每隔8个点取个像素值付给修改图,xy方向修改图的像素个数都是原图的1/8;

  • namedWindow(“新窗口名称”,窗口类型);

  • WINDOW_NORMAL:窗口可以随意拉伸;

  • resizeWindow(“修改尺寸的窗口名称”,宽,高);//这个可以不用,就是显示很小,拉大也行;

#define REDUCE_RATIO 8
//缩放图像
//定义图片的大小,然后遍历每个像素点赋值(图片的原始尺寸是256*256像素的)
Mat deImage(srcImage.cols / REDUCE_RATIO, srcImage.rows / REDUCE_RATIO, CV_8UC3);
int i = 0, j = 0;
for (int row = 0; row < srcImage.rows; row += REDUCE_RATIO)
{
	for (int col = 0; col < srcImage.cols; col += REDUCE_RATIO)
	{
		Vec3b pixel;
		pixel[0] = srcImage.at<Vec3b>(row, col)[0]; //Blue
		pixel[1] = srcImage.at<Vec3b>(row, col)[1]; //Green
		pixel[2] = srcImage.at<Vec3b>(row, col)[2]; //Red
		deImage.at<Vec3b>(i, j) = pixel;
		j++;
	}
	i++;
	j = 0;
}

//创建一个新窗口
namedWindow("降采样", WINDOW_NORMAL);
//设置窗口的大小,不然会显示图片实际大小的窗口
resizeWindow("降采样", 256, 256);
imshow("降采样", deImage);

效果
注意:

  • 如果图片尺寸不是8的整数倍,在遍历的时候会越界;
  • 不要用resize(deImage, deImage, Size(256, 256));平滑图像,resize会自动平滑;

3. 降灰度分辨率

#define GREY_RATIO 64

Mat greyImage(srcImage.cols, srcImage.rows, CV_8UC3);

for (int row = 0; row < srcImage.rows; row++)
{
	for (int col = 0; col < srcImage.cols; col++)
	{
		Vec3b pixel;
		pixel[0] = ((int)(srcImage.at<Vec3b>(row, col)[0]) / GREY_RATIO) * GREY_RATIO; //Blue
		pixel[1] = ((int)(srcImage.at<Vec3b>(row, col)[1]) / GREY_RATIO) * GREY_RATIO; //Green
		pixel[2] = ((int)(srcImage.at<Vec3b>(row, col)[2]) / GREY_RATIO) * GREY_RATIO; //Red
		greyImage.at<Vec3b>(i, j) = pixel;
		j++;
	}
	i++;
	j = 0;
}

imshow("降灰度分辨率", greyImage);

效果

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值