在新版OpenCv当中,图像显示只需要使用imread函数载入到数据结构Mat类中,然后用imshow函数显示即可。
其中imread函数支持的图形格式有:
Mat srcImg = imread("/Users/william/Desktop/test.png",2 | 4);//载入无损的源图像
Mat srcImg = imread("/Users/william/Desktop/test.png",0);//载入灰度图
Mat srcImg = imread("/Users/william/Desktop/test.png",199);//载入3通道的彩色图像
//
// main.cpp
// OpenCvDemo
//
// Created by william on 2019/1/2.
// Copyright © 2019 william. All rights reserved.
//
#include
#include
using namespace cv;
//图像显示
int main(int argc, const char * argv[]) {
//载入原图
Mat srcImg = cv::imread("/Users/william/Desktop/test.png");//载入
imshow("【原始图】", srcImg);//显示
waitKey(0);//等待
}
//
// main.cpp
// OpenCvDemo
//
// Created by william on 2019/1/2.
// Copyright © 2019 william. All rights reserved.
//
#include // OpenCV highgui模块
#include // OpenCV图像处理模块
using namespace cv;
// 图像腐蚀
int main(int argc, const char * argv[]) {
// 载入原图
Mat srcImg = cv::imread("/Users/william/Desktop/test.png");
imshow("【原图】腐蚀操作", srcImg);
// 进行腐蚀操作
Mat element = getStructuringElement(MORPH_RECT, Size(15,15));
waitKey(0);
// 其中,getStructuringElement函数返回指定形状和尺寸的结构元素(内核矩阵)。
Mat dstImg;
//图像腐蚀操作
erode(srcImg, dstImg, element);
// 显示效果图
imshow("【效果图】腐蚀", dstImg);
waitKey(0);
return 0;
}
图像模糊,主要使用均值滤波来实现blur效果。
//
// main.cpp
// OpenCvDemo
//
// Created by william on 2019/1/2.
// Copyright © 2019 william. All rights reserved.
//
#include // OpenCV highgui模块
#include // OpenCV图像处理模块
using namespace cv;
// @brief 图像模糊,主要使用均值滤波操作,
int main(int argc, const char * argv[]) {
// 载入原图
Mat srcImg = cv::imread("/Users/william/Desktop/test.png");
imshow("【原图】图像模糊操作", srcImg);
Mat dstImg;
// 模糊
blur(srcImg, dstImg, Size(10, 10));
// 显示效果图
imshow("【效果图】腐蚀", dstImg);
waitKey(0);
return 0;
}
将原图转换成灰度图之后,使用blur函数进行图形模糊来降噪,然后使用canny函数进行边缘检测。
//
// main.cpp
// OpenCvDemo
//
// Created by william on 2019/1/2.
// Copyright © 2019 william. All rights reserved.
//
#include
#include // OpenCV highgui模块
using namespace cv;
// @brief canny边缘检测
int main(int argc, const char * argv[]) {
// 载入原图
Mat srcImg = cv::imread("/Users/william/Desktop/test.png");
imshow("【原图】canny边缘检测操作", srcImg);
waitKey(0);
Mat edgeImage,grayImage;
// 原始图转为灰度图
cvtColor(srcImg, grayImage, CV_BGR2GRAY);
waitKey(0);
// 显示灰度图
imshow("【灰度图】", grayImage);
//保存到本地
imwrite("/Users/william/Desktop/grayImage.png", grayImage);
waitKey(0);
// 使用3*3内核来降噪
blur(grayImage, edgeImage, Size(3, 3));
// 运行Canny算子
Canny(edgeImage, edgeImage, 3, 9, 3);
// 显示效果图
imshow("【效果图】边缘检测", edgeImage);
imwrite("/Users/william/Desktop/edgeImage.png", edgeImage);
waitKey(0);
return 0;
}
定义Mat变量,用于存储每一帧的图形,接着读取当前帧到Mat变量中,然后调用imshow显示当前的这一帧的图像
//
// main.cpp
// OpenCvDemo
//
// Created by william on 2019/1/2.
// Copyright © 2019 william. All rights reserved.
//
#include
using namespace cv;
// @brief 读取斌给播放视频
int main(int argc, const char * argv[])
{
// 读取视频
VideoCapture capture("/Users/william/Desktop/Record.mp4");
// 循环显示每一帧
while(1)
{
Mat frame; // 用于存储每一帧的图像
capture>>frame;
// 若视频播放完成,则退出循环
if (frame.empty())
{
break;
}
imshow("读取视频", frame);
waitKey(30);
}
return 0;
}
生成一张rgba都为0的图
void createAlphaMat(Mat& mat)
{
for (int i = 0; i < mat.rows; ++i) {
for (int j = 0; j < mat.cols; ++j) {
Vec4b& rgba = mat.at(i,j);
rgba[0] = 0.0f;
rgba[1] = 0.0f;
rgba[2] = 0.0f;
rgba[3] = 0.0f;
}
}
}
//
// main.cpp
// OpenCvDemo
//
// Created by william on 2019/1/2.
// Copyright © 2019 william. All rights reserved.
//
#include
#include
using namespace cv;
void createAlphaMat(Mat& mat)
{
for (int i = 0; i < mat.rows; ++i) {
for (int j = 0; j < mat.cols; ++j) {
Vec4b& rgba = mat.at(i,j);
rgba[0] = UCHAR_MAX;
rgba[1] = saturate_cast((float (mat.cols - j)) / (float (mat.cols)) * UCHAR_MAX);
rgba[2] = saturate_cast((float (mat.rows - i)) / (float (mat.rows)) * UCHAR_MAX);
rgba[3] = saturate_cast(0.5 * (rgba[1] + rgba[2]));
}
}
}
// @brief 生成一张png图片并且保存
int main(int argc, const char * argv[]) {
//创建带alpha通道的Mat
Mat mat(480,640,CV_8UC4);
createAlphaMat(mat);
std::vector compression_params;
// openvc 3 version
compression_params.push_back(IMWRITE_PNG_BILEVEL);
try {
imwrite("/Users/william/Desktop/透明alpha值图.png", mat, compression_params);
imshow("生成的透明PNG图",mat);
std::fprintf(stdout, "save image successful!");
waitKey(0);
} catch (std::runtime_error& ex) {
std::fprintf(stderr, "图像转png格式发生错误:%s",ex.what());
return 1;
}
return 0;
}
//
// main.cpp
// OpenCvDemo
//
// Created by william on 2019/1/2.
// Copyright © 2019 william. All rights reserved.
//
#include
#include
#include
using namespace cv;
// @brief 初级图像混合,输入,输出,保存
int main(int argc, const char * argv[]) {
Mat srcImage = imread("/Users/william/Desktop/testImage/test.png",1);
Mat background = imread("/Users/william/Desktop/testImage/background.png",1);
if (!background.data) {
printf("读取图片srcImage失败!");
return -1;
}
if (!srcImage.data) {
printf("读取图片srcImage2失败!");
return -1;
}
namedWindow("初级混合");
// 存放图片
Mat imageROI;
imageROI = background(Rect(0,0,srcImage.cols,srcImage.rows));
// imageROI = srcImage(Range(350, 350 + srcImage2.rows), Range(800, 800 + srcImage2.cols));
// 此处有两种写法
addWeighted(imageROI, 0.5, srcImage, 0.3, 0.0, imageROI);
namedWindow("混合图");
imshow("混合图",background);
imwrite("/Users/william/Desktop/testImage/混合图.png", background);
waitKey(0);
return 0;
}
//
// main.cpp
// OpenCvDemo
//
// Created by william on 2019/1/2.
// Copyright © 2019 william. All rights reserved.
//
#include
#include
using namespace cv;
const int g_nMaxAlphaValue = 100;// Alpha 值的最大值
int g_nAlphaValueSlider;// 滑动条对应的变量
double g_dAlpahValue;
double g_dBetaValue;
//声明个存储图像的变量
Mat g_srcImage1;
Mat g_srcImage2;
Mat g_dstImage;
// @brief 相应滑动条的回调函数
void on_Trackbar(int, void*)
{
// 求出当前alpha值相对与最大值的比例
g_dAlpahValue = (double) g_nAlphaValueSlider / g_nMaxAlphaValue;
// 则beta值为1减去alpha值
g_dBetaValue = (1.0f - g_dAlpahValue);
// 根据alpha和beta值进行线性混合
addWeighted(g_srcImage1, g_dAlpahValue, g_srcImage2, g_dBetaValue, 0.0f, g_dstImage);
// 显示效果图
imshow("Trackbar", g_dstImage);
}
// @brief 滑动条的创建和使用
int main(int argc, const char * argv[])
{
// 加载图像(两图像的尺寸需要相同)
g_srcImage1 = imread("/Users/william/Desktop/testImage/test.png",1);
g_srcImage2 = imread("/Users/william/Desktop/testImage/test2.png",1);
if (!g_srcImage1.data) {
printf("读取g_srcImage1失败");
return -1;
}
if (!g_srcImage2.data) {
printf("读取g_srcImage2失败");
return -1;
}
// 设置滑动条初值为70
g_nAlphaValueSlider = 70;
// 创建窗口
namedWindow("Trackbar",1);
char TrackbarName[50];
sprintf(TrackbarName, "alpha: %d",g_nMaxAlphaValue);
createTrackbar(TrackbarName, "Trackbar", &g_nAlphaValueSlider, g_nMaxAlphaValue,on_Trackbar);
// 结果回调函数中显示
on_Trackbar(g_nAlphaValueSlider, 0);
//获取当前轨迹调的位置并且返回
int TrackPosition = getTrackbarPos("Trackbar", "Trackbar");
printf("TrackPosition:%d",TrackPosition);
waitKey(0);
return 0;
}
//
// main.cpp
// OpenCvDemo
//
// Created by william on 2019/1/2.
// Copyright © 2019 william. All rights reserved.
//
#include
#include
using namespace cv;
// @brief Mat创建位图
int main(int argc, const char * argv[])
{
Mat M(80, 100, CV_8UC3, Scalar(255.0f, 0.0f ,255.0f,1.0f));
std::cout << "M = " << std::endl << " " << M << std::endl<< std::endl ;
imshow("test", M);
imwrite("/Users/william/Desktop/testImage/testSave.png",M);
waitKey(0);
return 0;
}
//
// main.cpp
// OpenCvDemo
//
// Created by william on 2019/1/2.
// Copyright © 2019 william. All rights reserved.
//
#include
#include
#include
using namespace cv;
//全局函数声明
static void on_ContrastAndBright(int, void*);
static void ShowHelpText();
//全局变量声明
const int g_nMaxContrastValue = 100;// Contrast 值的最大值
const int g_nMaxBrightValue = 100;// Bright 值的最大值
int g_nContrastValue;//对比度值
int g_nBrightValue;//亮度值
Mat g_srcImage,g_dstImage;
// @brief 图像对比度、亮度值调整
int main(int argc, const char * argv[])
{
// 读取
g_srcImage = imread("/Users/william/Desktop/testImage/test.png",1);
if (!g_srcImage.data) {
printf("g_srcImage is not excit!");
}
g_dstImage = Mat::zeros(g_srcImage.size(), g_srcImage.type());
g_nContrastValue = 80;
g_nBrightValue = 100;
// 创建效果图窗口
namedWindow("ContrastValueAndBright",1);
char TrackbarName1[50];
char TrackbarName2[50];
sprintf(TrackbarName1, "ContrastValue: %d", g_nMaxContrastValue);
sprintf(TrackbarName2, "BrightValue: %d", g_nMaxBrightValue);
//创建轨迹条
createTrackbar(TrackbarName1, "Contrast", &g_nContrastValue, 300, on_ContrastAndBright);
createTrackbar(TrackbarName2, "Bright", &g_nBrightValue, 200, on_ContrastAndBright);
//进行回调函数初始化
on_ContrastAndBright(g_nContrastValue, 0);
on_ContrastAndBright(g_nBrightValue, 0);
//按下”q“键时,程序退出
while (char(waitKey(1)) != 'q' ) {}
return 0;
}
void on_ContrastAndBright(int, void*){
namedWindow("srcImage",1);
//三个for循环,执行运算 g_dstImage(i,j) = a*g_srcImage(i,j) + b;
for (int y = 0; y < g_srcImage.rows ; ++y)
{
for (int x = 0; x < g_srcImage.cols; ++x) {
for (int c = 0; c < 3; ++c) {
g_dstImage.at(y,x)[c] = saturate_cast((g_nContrastValue*0.01) * (g_srcImage.at(y,x)[c] + g_nBrightValue));
}
}
}
imshow("origin", g_srcImage);
imshow("effect", g_dstImage);
}