- 文章主要内容实现
(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;
}