VS+OpenCV实现图像读取,格式化转换,储存、摄像头获取图片等操作

  • 文章主要内容实现

(1)在Windows下搭建VS+OpenCV平台。
(2)实现图像读取,格式化转换,储存等操作。
(3)实现图像感兴趣的区域截取。
(4)读取并输出某个像素点的RGB数据。
(5)能使用摄像头获取图片。

1.在Windows下搭建VS+OpenCV平台:
VS+OpenCV实现图像读取,格式化转换,储存、摄像头获取图片等操作_第1张图片

(2)实现图像读取,格式化转换,储存等操作:
VS+OpenCV实现图像读取,格式化转换,储存、摄像头获取图片等操作_第2张图片
VS+OpenCV实现图像读取,格式化转换,储存、摄像头获取图片等操作_第3张图片
(3)实现图像感兴趣的区域截取。
VS+OpenCV实现图像读取,格式化转换,储存、摄像头获取图片等操作_第4张图片
VS+OpenCV实现图像读取,格式化转换,储存、摄像头获取图片等操作_第5张图片
(4)读取并输出某个像素点的RGB数据。
VS+OpenCV实现图像读取,格式化转换,储存、摄像头获取图片等操作_第6张图片
调用后面的函数:
VS+OpenCV实现图像读取,格式化转换,储存、摄像头获取图片等操作_第7张图片

VS+OpenCV实现图像读取,格式化转换,储存、摄像头获取图片等操作_第8张图片

(5)能使用摄像头获取图片。
VS+OpenCV实现图像读取,格式化转换,储存、摄像头获取图片等操作_第9张图片
VS+OpenCV实现图像读取,格式化转换,储存、摄像头获取图片等操作_第10张图片
源代码如下:


#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;
using namespace cv;
 
void my_mouse_callback(int event,int x, int y, int flags, void *param);  //输出RGB数据的函数

string FileLocation(string Location, int num, string EndLocationType);    //获取摄像头图片的函数
 
CvPoint st_point;
int blue  = 0;
int green = 0;
int red   = 0;
CvFont font;
 
int main(int argc, const char * argv[]) {

	//1、读取图像进行灰度处理 

	 Mat src = imread("image/lena.png");

    if (src.empty()){
	   printf("没有图片");
	  return -1;      
      }
     imshow("读取原图",src);       //显示图像src
	
	//Mat output_image;    //定义对象output_image
	//cvtColor(src,output_image,CV_BGR2HLS);     //修改图像src
	//imshow("图片",output_image);

	imwrite("image/beautiful.jpg",src);        //转换图片格式并保存

	//(3) 截取部分图片

	Rect rect(100,100,400,400);               
	Mat roi=src(rect);
	
	//namedWindow("women");
	namedWindow("ROI");

	//imshow("women",src);
	imshow("ROI",roi);


	//(4)读取并输出某一像素点的RGB数据

    const char filename[] = "image/lena.png";
    
    IplImage * image = cvLoadImage(filename);
    
    cvInitFont(&font, CV_FONT_HERSHEY_COMPLEX, 1, 1, 0, 2, 8);
    
    cvNamedWindow("RGB");
    
    cvSetMouseCallback("RGB",  my_mouse_callback, (void *)image);
    
    cvShowImage("RGB", image);
    
    cvWaitKey(0);
 
    cvReleaseImage(&image);
    
    cvDestroyWindow("RGB");

 


	//(5)使用摄像头获取图片
	//程序说明:1.按下ESC程序退出,2.按下空格键截取图像

			Mat srcImage;
			char c;
			int temp=0;        //计数器
			VideoCapture cam(0);
			if(!cam.isOpened())
				exit(0);
			namedWindow("【拍摄中......】");
			while (true) {
			cam >> srcImage;
			imshow("【拍摄中......】", srcImage);
			c = waitKey(30);
			if (c == ' ')
			{
			imwrite(FileLocation("image/",temp,".jpg"),srcImage);
			temp++;
			}
			if (c == 27)
			break;
			}
			return 0;	
}

//下面是(4)(5)需要调用的函数

void my_mouse_callback(int event,int x,int y,int flags,void *param)
{
    IplImage * image = (IplImage *)param;
    
    switch (event) {
            //鼠标离开
        case CV_EVENT_LBUTTONDOWN:
            {
                //鼠标左键点击事件,记录点击的(x,y)
                st_point.x = x;
                st_point.y = y;
                break;
            }
        case CV_EVENT_LBUTTONUP:
            {
                //鼠标左键放开事件,读取当前点的像素值RGB
                unsigned char * ptr = (uchar *)(image->imageData + st_point.x * image->widthStep);
                blue  = (int)(*(ptr + st_point.y));
                green = (int)(*(ptr + st_point.y + 1));
                red   = (int)(*(ptr + st_point.y + 2));
                
                char text[20] = "0";
                sprintf(text,"(%d,%d,%d)",blue,green,red);
                cout<<"Text = "<> imageFileName;
		imageFileName += EndLocationType;
		return Location + imageFileName;
		}

你可能感兴趣的:(数字图像处理)