实验一 熟悉OpenCV环境和基本操作

文章介绍了使用OpenCV进行图像处理的基本操作,包括读取图像、直方图均衡化、对比度增强(拉伸和幂次变换)的示例代码,以及实验报告的要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验一 熟悉OpenCV环境和基本操作

一、实验目的

熟悉OpenCV运行环境,了解图像的基本操作及直方图均衡化。

二、实验内容

一个简单的图像处理例子。

代码如下:

#include <opencv2/opencv.hpp>

using namespace cv;

int main() {

       Mat img = imread("result1.bmp");

       int nr = img.rows; // number of rows

       int nc = img.cols; // number of columns

       Mat result;

       result.create(img.rows, img.cols, img.type());

       for (int j = 0; j < nr; j++) {

              for (int i = 0; i < nc; i++) {

                     result.at<uchar>(j, i) = 255 - img.at<uchar>(j, i);

              } // end of row

       }

       namedWindow("source");

       imshow("source", img);

       namedWindow("result");

       imshow("result", result);

       waitKey(0);

       return 0;

}

三、实验要求

1.按上述代码运行,能不能得出正确结果?如果不能,请修改代码。

2.利用OpenCV产生一幅图像,尺寸为200*240,三通道,其中某一块为红色,其它皆为黑色,示例图如下。

 

  1. 对一幅低对比度图像进行增强处理,分别采用直方图均衡化、对比拉伸和幂次变换的方法,比较处理结果。

直方图均衡化算法步骤如下:

  1. 统计直方图数组,用一个数组p记录p[i];
  2. i从1开始,令S[i]=S[i-1]+p[i],S[0]=p[0];
  3. 一个数组L记录新的S索引值,即令L[i]=S[i]*(256-1);

依次循环每一个像素,取原图的像素值作为数组L的下标值,取该下标对应的数组值为均衡化之后的像素值。

四、实验报告要求

1.给出简要的设计思路(原理)

<1>通过result.at<Vec3b>(j, i)[?]访问不同通道

<2>通过将像素数均分为相等的小块,正方形各占长宽相同数量的像素即可,然后再做一些偏移

<3>

//直方图均衡化

首先计算原始图像的直方图,然后计算直方图的累积分布函数,接着计算映射后的灰度级,最后用新的映射关系修改原始图像的灰度级,获得直方图近似均匀分布的输出图像。这种处理方式使得原始图像中具有相近灰度且占有大量像素点的区域灰度范围展宽,同时使占有较少像素的灰度级变换后和前一个灰度级的级差减小,从而增强图像的对比度和清晰度。

//拉伸

将整体图片的像素压缩到某段区间内

//幂次变换

将图片的某些像素灰度提高,某些降低

2.给出主要代码

<1> for (int j = 0; j < nr

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值