Picture reading and display
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv) {
Mat src = imread("D:\\visual studio\\c++ opencv\\image information\\lena.jpg");
if (src.empty()) {
printf("could not load image...\n");
return -1;
}
//实现窗口可调
namedWindow("输入窗口",WINDOW_FREERATIO);
imshow("输入窗口", src);
waitKey(0);
destroyAllWindows();
return 0;
}
Image color space conversion
#include<opencv2/opencv.hpp>
#include<quickopencv.h>
//色彩空间转换函数-cvtColor
//COLOR_BGR2GRAY = 6彩度到灰度
//COLOR_GRAY2BGR = 8灰度到彩色
//COLOR_BGR2HSV = 40 BGR 到 HSV
//COLOR_HSV2BGR = 54 HSV 到 BGR
//图像保存-imwrite
//第一个参数是图像保存路径
//第二个参数是图像内存对象
int main(int argc,char** argv) {
Mat src = imread("D:\\visual studio\\c++ opencv\\image information\\lena.jpg");
if (src.empty()) {
printf("could not load image....\n");
return -1;
}
//namedWindow("输入窗口", WINDOW_FREERATIO);
imshow("输入窗口", src);//imshow 必须是8位
QuickDemo qd;
qd.colorSpace_Demo(src);
waitKey(0);
destroyAllWindows();
return 0;
}
Creation and assignment of image objects.cpp
#include<quickopencv.h>
int main(int argc,char** argv) {
Mat src = imread("D:\\visual studio\\c++ opencv\\image information\\lena.jpg");
if (src.empty()) {
printf("could not load image....\n");
return -1;
}
QuickDemo qd;
qd.pixel_visit_demo(src);
waitKey(0);
destroyAllWindows();
quickopencv.cpp
#include<quickopencv.h>
void QuickDemo::colorSpace_Demo(Mat& image) {
Mat gray, hsv;
cvtColor(image, hsv, COLOR_BGR2HSV);
cvtColor(image, gray, COLOR_BGR2GRAY);
imshow("HSV", hsv);
imshow("gray", gray);
imwrite("D:\\visual studio\\c++ opencv\\hsv\\hsv.png",hsv);
imwrite("D:\\visual studio\\c++ opencv\\gray\\gray.png", gray);
}
void QuickDemo::mat_creation_Demo(Mat& image) {
Mat m1, m2;
m1 = image.clone();
image.copyTo(m2);
//创建空白对象
Mat m3 = Mat::zeros(Size(400, 400), CV_8UC3);
//CV_8UC3 3个通道 3*8*8 m3.clos:宽度 m3.rows:高度 m3.channels:通道数
//Mat::ones(Size(8, 8))都是1,不过对于CV_8UC3来说是第一个位置为1
//m3 = Scalar(127,127,127);三个通道都赋值127
m3 = Scalar(0, 0, 255);//红色 BGR
//std::cout << m3 << std::endl;
imshow("图像",m3);
}
void QuickDemo::pixel_visit_demo(Mat& image) {
int w = image.cols;
int h = image.rows;
int dims = image.channels();
for (int row = 0;row < h;row++) {
for (int col = 0;col < w;col++) {
if (dims == 1) {
int pv = image.at<uchar>(row,col);
image.at<uchar>(row, col) = 255 - pv;
}
if (dims == 3) {
Vec3d bgr = image.at<Vec3b>(row, col);
image.at<Vec3b>(row, col)[0] = 255 - bgr[0];
image.at<Vec3b>(row, col)[1] = 255 - bgr[1];
image.at<Vec3b>(row, col)[2] = 255 - bgr[2];
}
}
}
imshow("像素读写演示", image);
}
void QuickDemo::operators_demo(Mat& image) {
Mat dst;
imshow("原图像", image);
dst = image + Scalar(50, 50, 50);
imshow("加法操作", dst);
//dst = image - Scalar(50,50,50);
//dst = image / Scalar(2, 2, 2);
//乘法
imshow("加法操作",dst);
Mat m = Mat::zeros(image.size(), image.type());
m = Scalar(2, 2, 2);
multiply(image, m, dst);//乘法
//除法 divide(image, m ,dst);
imshow("乘法操作", dst);
/*加法操作另一种写法
Mat dst = Mat::zeros(image.size(), image.type());;
Mat m = Mat::zeros(image.size(), image.type());
m = Scalar(2, 2, 2);
int w = image.cols;
int h = image.rows;
int dims = image.channels();
for (int row = 0;row < h;row++) {
for (int col = 0;col < w;col++) {
Vec3b p1 = image.at<Vec3b>(row, col);
Vec3b p2 = m.at<Vec3b>(row, col);
dst.at<Vec3b>(row, col)[0] = saturate_cast<uchar>(p1[0] + p2[0]);
dst.at<Vec3b>(row, col)[1] = saturate_cast<uchar>(p1[1] + p2[1]);
dst.at<Vec3b>(row, col)[2] = saturate_cast<uchar>(p1[2] + p2[2]);
}
}
*/
}
Mat src, dst, m;
int lightness = 50;
static void on_track(int, void*) {
m = Scalar(lightness, lightness, lightness);
add(src, m, dst);//subtract(src, m, dst);
imshow("亮度调整", dst);
}
void QuickDemo::tracking_bar_demo(Mat& image) {
namedWindow("亮度调整", WINDOW_FREERATIO);
dst = Mat::zeros(image.size(), image.type());
m = Mat::zeros(image.size(), image.type());
src = image;
int max_value = 100;
createTrackbar("Value Bar:", "亮度调整", &lightness, max_value,on_track);
on_track(50, 0);
}
quickopencv.h
#pragma once
#include <opencv2/opencv.hpp>
using namespace cv;
class QuickDemo{
public:
void colorSpace_Demo(Mat &image);
void mat_creation_Demo(Mat& image);
void pixel_visit_demo(Mat& image);
void operators_demo(Mat &image);
void tracking_bar_demo(Mat& image);
};
Read and write operations on image pixels
#include<quickopencv.h>
int main(int argc, char** argv) {
Mat src = imread("D:\\visual studio\\c++ opencv\\image information\\lena.jpg");
if (src.empty()) {
printf("could not load image....\n");
return -1;
}
imshow("原图像", src);
QuickDemo qd;
qd.pixel_visit_demo(src);
waitKey(0);
destroyAllWindows();
}
滚动条操作-调整图像亮度
#include<quickopencv.h>
int main(int argc, char** argv) {
Mat src = imread("D:\\visual studio\\c++ opencv\\image information\\jx.jpg");
if (src.empty()) {
printf("could not load image....\n");
return -1;
}
namedWindow("原图像", WINDOW_FREERATIO);
imshow("原图像", src);
QuickDemo qd;
qd.tracking_bar_demo(src);
waitKey(0);
destroyAllWindows();
}