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

  • 文章主要内容实现

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

1.在Windows下搭建VS+OpenCV平台:
在这里插入图片描述

(2)实现图像读取,格式化转换,储存等操作:
在这里插入图片描述
在这里插入图片描述
(3)实现图像感兴趣的区域截取。
在这里插入图片描述
在这里插入图片描述
(4)读取并输出某个像素点的RGB数据。

调用后面的函数:
在这里插入图片描述

在这里插入图片描述

(5)能使用摄像头获取图片。
在这里插入图片描述
在这里插入图片描述
源代码如下:


#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/core/core.hpp>
#include <stdio.h>
#include <cstdlib>
#include <io.h>

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 = "<<text<<endl;
                cvPutText(image, text, st_point, &font, CV_RGB(0,0,0));
                cvShowImage("RGB", image);
                break;
            }
        default:
            break;
		}
	}

 string FileLocation(string Location, int name, string EndLocationType){
        string imageFileName;
		std::stringstream StrStm1;
		StrStm1 <<name + 1;
		StrStm1 >> imageFileName;
		imageFileName += EndLocationType;
		return Location + imageFileName;
		}
  • 11
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值