// 显示图像
void CV120201012Dlg::showImg()
{
// 加载一幅图像
Mat src = imread("E:\\PR\\resource\\picture\\2020-10-11_224039.png", IMREAD_GRAYSCALE);
//判断是否加载成功
if (src.empty())
{
MessageBox(_T("加载图像失败!"),_T("Error")); //
}
else
{
namedWindow("opencv lodeImg demo", WINDOW_AUTOSIZE);
imshow("opencv lodeImg demo", src); // 显示图像
waitKey(0);
}
}
// 改变图像参数
void CV120201012Dlg::changeImg()
{
// 创建院士图像
Mat src = imread("E:\\PR\\resource\\picture\\2020-10-11_224039.png");
// 创建一个显示窗口
namedWindow("change img",WINDOW_AUTOSIZE);
// 定义一个变量作为转换之后的图像
Mat out_IMG;
cvtColor(src,out_IMG,COLOR_BGR2GRAY);
// 显示
imshow("change img", out_IMG);
// 保存图像
imwrite("E:\\PR\\resource\\picture\\2.tiff", out_IMG);
}
// 图像掩膜
void CV120201012Dlg::yanMo()
{
// 加载图像
Mat mImg = imread("E:\\PR\\resource\\picture\\2020-10-11_224039.png");
if (!mImg.data)
{
MessageBox(_T("图像加载失败!"),_T("error"));
return;
}
// 加载一个窗口
namedWindow("YanMo window test", WINDOW_AUTOSIZE);
// 显示
imshow("YanMo window test",mImg);
}
// 创建一幅新图像
void CV120201012Dlg::createNew()
{
Mat m1 = Mat::zeros(Size(400,400),CV_8UC1);
m1 = Scalar(0,0,255);
imshow("创建窗口",m1);
waitKey(0);
}
//克隆复制
void CV120201012Dlg::imgCopy()
{
Mat m1 = Mat::zeros(Size(400, 400), CV_8UC1);
m1 = Scalar(0, 0, 255);
Mat m2, m3;
m2 = m1.clone();
imshow("创建窗口2", m2);
m1.copyTo(m3);
imshow("创建窗口3", m3);
waitKey(0);
}
// 像素读写演示
void CV120201012Dlg::PixlShow()
{
// 读取一幅图像
Mat m1 = imread("E:\\PR\\resource\\picture\\2020-10-11_224039.png");
if (!m1.data)
{
MessageBox(_T("图像加载失败!"),_T("error"));
return;
}
// 获取图像的 行 列 值
int width = m1.cols;
int height = m1.rows;
int channel = m1.channels();
// 遍历行列的像素 -- 数组
//for (int i = 0;i < height;i++)
//{
// for (int j = 0;j < width;j++)
// {
// // 判断是 单通道还是3通道
// if (channel == 1)
// {
// // 获取每个点的像素值
// int pv = m1.at<uchar>(i, j);
// // 改变每个点的像素值
// m1.at<uchar>(i, j) = 255 - pv; // 像素值反转
// }
// if (channel == 3)
// {
// Vec3b pv = m1.at<Vec3b>(i, j);
// m1.at<Vec3b>(i, j)[0] = 255 - pv[0];
// m1.at<Vec3b>(i, j)[1] = 255 - pv[1];
// m1.at<Vec3b>(i, j)[2] = 255 - pv[2];
// }
// }
//}
// 遍历行列的像素 -- 指针
for (int i = 0;i < height;i++)
{
// 定义当前行指针
uchar* pr = m1.ptr<uchar>(i);
for (int j = 0;j < width;j++)
{
// 判断是 单通道还是3通道
if (channel == 1)
{
// 获取每个点的像素值
int pv = *pr;
// 改变每个点的像素值
*pr++ = 255 - pv;
}
if (channel == 3)
{
*pr++ = 255 - *pr;
*pr++ = 255 - *pr;
*pr++ = 255 - *pr;
}
}
}
imshow("像素读写",m1);
waitKey(0);
}
涉及到的相关函数解释,参见https://blog.csdn.net/L946494/article/details/109138174