·
专 业:计算机科学技术
学 号:
姓 名:马艳松
提交日期:2014.6.5
实验一 数字图像的读入与显示
一.实验目的:
1.熟悉opencv的开发环境设置
2.读取一幅图像,并显示,掌握Imread, imwrite,imshow的使用
3.掌握opencv中图像的表示,及其属性的含义。
二.实验内容: 配置好visualstudio2010下opnecv开发环境
使用opencv的函数读入一幅图像,并在窗口中显示出来。
三.实验步骤:
#include "stdafx.h"
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
void test1()
{
Mat inputImage=imread("..\\image\\book\\beach.jpg",1);
if(!pty())
{
cvNamedWindow("test");
imshow("test",inputImage);
waitKey();
}
el
{
cout<<" error!";
getchar();
}
}
永王东巡歌
int _tmain(int argc, _TCHAR* argv[])
{
test1();
return 0;
黑蒜的作用与功效}
四.实验心得:通过上课实验理解了opencv的配置过程。通过程序实现了图片的成象处理。
实验二 数字图像像素的访问
一.实验目的: 掌握opencv开发环境中对灰度图像及彩色图像中的像素的访问方法
理解mat数据结构
掌握opencv中对图像进行处理的基本过程。
二.实验内容: (1)打开一幅灰度图像,对其进行线性灰度变换(直线方程的参数为k, b),并显示变换前、后的图像。;调整K值,分别取>1, <1, =1, 以及-1,比较不同K值时的图像增强效果。
(2)打开一幅彩色图像,对每个像素进行访问,分别令R、G、B的值为0,查看处理后的图像,并比较原图像的差异。
重点和难点: 掌握灰度图像和彩色图像的像素的值的访问方法。
三.实验步骤:
1r)实验代码
void image1Pixel()
{
double durationa,durationb,durationc;
double cacStart,cacEnd;
Mat image=imread("..\\image\\book\\beach.jpg",1);
Mat gray(image.size().height,image.size().width,CV_8UC1,Scalar(0));
//gray=0.299R+0.587G+0.114b
uchar r,g,b;
float fgray;
cacStart = static_cast<double>(getTickCount());
for(int m=0;m<100;m++)
for(int i=0;i<image.size().height;i++)
for(int j=0;j<image.size().width;j++)果汁英语
{
b=image.at<Vec3b>(i,j)[0];
g=image.at<Vec3b>(i,j)[1];
r=image.at<Vec3b>(i,j)[2];
画可爱的小动物 fgray=0.299*r+0.587*g+0.114*b;
gray.at<uchar>(i,j)=saturate_cast<uchar>(fgray);
}
imshow("",gray);
cacEnd = static_cast<double>(getTickCount());
durationa=(cacEnd-cacStart)/cv::getTickFrequency(); // the elapd time in ms
waitKey();
}
2)实验代码
#include "stdafx.h"
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
void image1Pixel()
{
double durationa,durationb,durationc;
double cacStart,cacEnd;
Mat image=imread("..\\image\\book\\beach.jpg",1);
Mat gray(image.size().height,image.size().width,CV_8UC1,Scalar(0));
Mat grayGB(image.size().height,image.size().width,CV_8UC3,Scalar(0));
Mat grayRB(image.size().height,image.size().width,CV_8UC3,Scalar(0));
Mat grayRG(image.size().height,image.size().width,CV_8UC3,Scalar(0));
uchar r,g,b;
float fgray;
cacStart = static_cast<double>(getTickCount());
for(int m=0;m<100;m++)
for(杨树拼音int i=0;i<image.size().height;i++)
for(int j=0;j<image.size().width;j++)
{ b=image.at<Vec3b>(i,j)[0];
g=image.at<Vec3b>(i,j)[1];
r=image.at<Vec3b>(i,j)[2];
////////////////////////////舍身取义的事例
grayGB.at<Vec3b>(i,j)[0] = b;
grayGB.at<Vec3b>(i,j)[1] = g;
grayGB.at<Vec3b>(i,j)[2] = 0; //R
grayRB.at<Vec3b>(i,j)[0] = b;
grayRB.at<Vec3b>(i,j)[1] = 0;// G
grayRB.at<Vec3b>(i,j)[2] = r;
grayRG.at<Vec3b>(i,j)[0] = 0; //B
grayRG.at<Vec3b>(i,j)[1] = g;
grayRG.at<Vec3b>(i,j)[2] = r;
////////////////////////////
fgray=0.299*r+0.587*g+0.114*b;
gray.at<uchar>(i,j)=saturate_cast<uchar>(fgray);
}
cvNamedWindow("org");
imshow("org",image);
cvNamedWindow("gray");
imshow("gray",gray);
waitKey();
cacEnd = static_cast<double>(getTickCount());
durationa=(cacEnd-cacStart)/cv::getTickFrequency();
}
void test1()
{
Mat inputImage=imread(爱牙手抄报"..\\image\\book\\beach.jpg",1);
if(!pty())
{
cvNamedWindow("test");
imshow("test",inputImage);
waitKey();
}
el
{
cout<<" error!";
getchar();
}
}
int _tmain(int argc, _TCHAR* argv[])
{圆白菜的做法大全
image1Pixel();
test1();
return 0;
}
心得体会:通过本次试验,我了解并大致掌握灰度图像和彩色图像的像素的值的访问方法。由于之前很少练习这方面的内容,试验过程中遇到了一些问题,好在在别人的帮助下和向别人咨询终于了解了这方面知识的大致框架和原理。由此更坚定了我学习下去的信心和动力!
实验三 图像的平滑
一.实验目的: 掌握opencv开发环境中对灰度图像及彩色图像中的像素的访问方法
掌握opencv中对图像进行处理的基本过程。
掌握均值平滑和中值滤波的基本原理
二.实验内容: (1)打开一幅灰度图像,对图像进行3*3(包括中心点)的邻域平均处理。
(2)对原图进行3*3(包括中心点)的中值滤波处理。
(3)比较原图像与邻域平均的图像、中值滤波后的图像的差异
三.实验步骤:
1)中值滤波处理
for(int i=1;i<image.size().height-1;i++)
{
for(int j=1;j<image.size().width-1;j++)
{
int a[9]={gray.at<uchar>(i-1,j),gray.at<uchar>(i,j),gray.at<uchar>(i+1,j),
gray.at<uchar>(i-1,j-j),gray.at<uchar>(i,j-1),gray.at<uchar>(i+1,j-1)
+gray.at<uchar>(i-1,j+1),gray.at<uchar>(i,j+1),gray.at<uchar>(i+1,j+1)};
gray.at<uchar>(i,j)=GetMidNum(a);
}
}
imshow("中值滤波",gray);
cacEnd = static_cast<double>(getTickCount());