OpenCV Core组件操作

来源:互联网 发布:ps软件文字编辑 编辑:程序博客网 时间:2024/05/29 18:24

最近在复习opencv,整理一下基础知识。今天把Core组件的相关操作记录下来,常用的操作有以下几个:

Mat结构体

 

访问像素

Matimage;

Uchar*data = image.ptr<uchar>(i);

 

Mat_<Vec3b>::iteratorit = image.begin<Vec3b>();

(*it)[0];

 

Image.at<Vec3b>(i,j)[0];

图像叠加、混合

Matimage;

Image= iamge(Rect(500,250,logo.cols,log.rows));

Image= image(Range(250,250+logoimage.rows), Range(250,250+logoimage.cols));

logoImage.copyTo(image,mask);

addWeighted();

通道分离、合并

Spilt();

Merge();

对比度、亮度调节

 

下面记录一个VS下面的例子,方便以后利用、查看。

#include<iostream>#include "classify.h"#include<math.h>#define max(a,b) a>b?a:busing namespace std;#define WINDOW_NAME "融合"int g_nAl = 0;void on_Trackbar(int a, void* c)//添加进度条{cv::Mat image1 = cv::imread("D:\\OpenCVprivate\\4.jpg");cv::resize(image1, image1, cv::Size(720, 1280), 0.0, 0.0, CV_INTER_NN);cv::Mat imageResult;cv::Mat image2 = cv::Mat::zeros(image1.size(), image1.type());try{addWeighted(image1, g_nAl / 100.0, image2, 1 - g_nAl / 100.0, 20.0, imageResult);}catch (...){}cv::imshow("WINDOW_NAME", imageResult);cv::waitKey(10);}void imageAdd()//图像融合{cv::Mat image1 = cv::imread("D:\\OpenCVprivate\\3.jpg");cv::Mat image2 = cv::imread("D:\\OpenCVprivate\\5.jpg");cv::Mat image3 = cv::imread("D:\\OpenCVprivate\\4.jpg");cv::resize(image1, image1, cv::Size(869, 1200), 0.0, 0.0, CV_INTER_NN);cv::resize(image2, image2, cv::Size(300, 250), 0.0, 0.0, CV_INTER_NN);cv::resize(image3, image3, cv::Size(869, 1200), 0.0, 0.0, CV_INTER_NN);cv::Mat image4 = image1(cv::Rect(500, 300, image2.cols, image2.rows));image2 = cv::min(image4, image2);image2.copyTo(image4, cv::Mat());cv::imshow("result", image1);addWeighted(image1, 0.5, image3, 0.5, 0.0, image1);cv::imshow("图像融合", image1);cv::waitKey();}void splitMerge()//通道分离、合并{cv::Mat image1 = cv::imread("D:\\OpenCVprivate\\7.jpg");cv::Mat image2 = cv::imread("D:\\OpenCVprivate\\11.jpg");cv::Mat image3 = cv::imread("D:\\OpenCVprivate\\12.jpg");cv::resize(image2, image2, cv::Size(869, 1200), 0.0, 0.0, CV_INTER_NN);cv::resize(image1, image1, cv::Size(869, 1200), 0.0, 0.0, CV_INTER_NN);cv::resize(image3, image3, cv::Size(869, 1200), 0.0, 0.0, CV_INTER_NN);cv::Mat image4;cv::Mat spilt1[3];cv::Mat spilt2[3];cv::Mat spilt3[3];split(image1, spilt1);split(image2, spilt2);split(image3, spilt3);spilt1[2] = spilt1[2];spilt1[2] = spilt3[2];merge(spilt1, 3, image4);cv::imshow("分离、合并", image4);cv::waitKey();}void brightnessContrast(int value, int value2)//亮度对比度调节{cv::Mat image = cv::imread("D:\\OpenCVprivate\\3.jpg");image.rowRange(0, 10).setTo(cv::Scalar(0));image.colRange(image.cols - 10, image.cols).setTo(cv::Scalar(0));image.colRange(0, 10).setTo(cv::Scalar(0));image.rowRange(image.rows - 10, image.rows).setTo(cv::Scalar(0));for (int y = 10; y < image.rows - 10; y++)for (int x = 10; x < image.cols - 10; x++)for (int c = 0; c < image.channels(); c++){image.at<cv::Vec3b>(y, x)[c] = MIN((value*0.01)*(image.at<cv::Vec3b>(y, x)[c] + value2), 255);image.at<cv::Vec3b>(y, x)[c] = MAX(image.at<cv::Vec3b>(y, x)[c], 0);}cv::imshow("亮度对比度", image);cv::waitKey();}int main(){imageAdd();splitMerge();brightnessContrast(120,0);//修改图像对比度(120%),亮度(+0)g_nAl = 70;double g_nMax = 100;cv::namedWindow(WINDOW_NAME,1);cv::createTrackbar("name:",WINDOW_NAME,&g_nAl,g_nMax,on_Trackbar); cv::waitKey();return 0;}
正常运行是没问题,知识没有整理,看起来会有些不舒服。好在代码不多,有时间在整理吧

原创粉丝点击