首先头文件:
#include
#include
#include
using namespace std;
using namespace cv;
1. 显示图像
cv::Mat image;//创建一个空图像
std::cout << "This image is "
<< image.rows << "x" << image.cols << std::endl;//通过size属性验证尺寸0x0
image = cv::imread("1.jpg");//读取输入的图像
if (image.empty()) {
std::cout << "erro!" << endl;//如果图像无效,则弹出提示
}
cv::namedWindow("Original Image");//定义窗口
cv::imshow("Oraginal Image", image);//显示图像
cv::waitKey(0);//永远等待,如果是正数则单位是毫秒
2.图像翻转
cv::Mat result;//创建另一个空图像,但好像不能同时创建两个,否则会报错
cv::flip(image, result, 1);//正数表示水平,0表示垂直,负数表示水平和垂直
cv::namedWindow("Output Image");//输出窗口
cv::imshow("Output Image", result);
cv::waitKey(0);//0为永远等待,正数为毫秒
cv::imwrite("Output.jpg", result);//保存结果
我遇到的问题:书上说可以保存到磁盘,可是我保存不了
3.灰度图像、通道数、就地处理
image = cv::imread("1.jpg", cv::IMREAD_GRAYSCALE);//读取一个图像并转换为灰度图像
//image = cv::imread("1.jpg", cv::IMREAD_COLOR);//读取图像并转换为三通道彩色图像
cv::namedWindow("Grey Image");//定义窗口
cv::imshow("Grey Image", image);//显示图像
cv::waitKey(0);
//如果要在读入图像时采用文件本身的格式,只需把第二个参数设置为负数
std::cout << "This image has "
<< image.channels() << "channel(s)";//可用此方法检查图像通道数
cv::flip(image, image, 1);//就地处理
cv::namedWindow("Grey Image");//定义窗口
cv::imshow("Grey Image", image);//显示图像
cv::waitKey(0);
4.图像点击
cv::Mat image;
image = cv::imread("1.jpg");
void onMouse(int event, int x, int y, int flags, void* param);
//event:出发回调函数事件类型 x,y:鼠标的位置(像素坐标) flags:按下鼠标的哪个键 param:指向任意对象的指针
int event=0;
int x=0;
int y=0;
int flags=0;
void* param=NULL;
cv::namedWindow("Original Image");//定义窗口
cv::imshow("Oraginal Image", image);//显示图像
cv::setMouseCallback("Original Image", onMouse,//onMouse与original image建立关联,把图像地址传给函数
reinterpret_cast(&image));
cv::waitKey(0);//永远等待
onMouse(event, x, y, flags, param);
//函数
void onMouse(int event, int x, int y, int flags, void* param) {
cv::Mat* im = reinterpret_cast(param);//获取(x,y)的像素值
switch (event) {//调度事件
//鼠标事件的回调函数可能收到的事件还有 cv::EVENT_MOUSEMOVE、cv::EVENT_LBUTTONUP、cv::EVENT_RBUTTONDOWN 和 cv::EVENT_RBUTTONUP。
case cv::EVENT_LBUTTONDOWN://鼠标左键按下事件
//显示像素值(x,y)
std::cout << "at(" << x << "," << y << ")value is:"
<< static_cast(
im->at(cv::Point(x, y))) << std::endl;
break;
}
遇到的问题:为什么出现了两个窗口,只能点击一个空的 PS:通过百度,发现应该是把配置中的链接器输入中的一个没有d的lib文件删掉,但是并没有什么用
5.图像绘画 添加头文件#include
//基本的形状绘制函数有circle、ellipse、line 和 rectangle。
cv::Mat image;
image = cv::imread("1.jpg");
cv::circle(image, //目标图像
cv::Point(155, 110), //中心点坐标
65, //半径
0, //颜色(black)
3); //厚度
cv::putText(image,
"Hair and sky.", //目标图像
cv::Point(40, 200), //文本
cv::FONT_HERSHEY_PLAIN, //文本位置
2.0, //字体类型
255, //字体颜色(white)
2); //文本厚度
cv::namedWindow("Original Image");//定义窗口
cv::imshow("Oraginal Image", image);//显示图像
waitKey(0);