slutload
文章目录
前言
最近心血来潮,想具体的去学习一下图像处理,所以报了知识星球的一个OpenCV研习社,将自己每天的学习,分享一下。写个 blog 加深一下知识。
一、数组遍历(缺点:慢)
1、示例
#include <opencv2/opencv.hpp>
#include <iOStream>
using namespace cv;
using namespace std;
int main(int argc, char* argv[])
{
Mat src = imread("F:/Cvimage/test.png");
if (src.empty())
{
printf("could not load image....\n");
return -1;
}
namedWindow("input", WINDOW_AUTOSIZE);
imshow("input", src);
int height = src.rows; //读图片高度
int width = src.cols; //读取图片宽度
int ch = src.channels(); //读取图片通道数 rgb:三通道 灰色图像:单通道 rgba:四通道,多一个透明度
//数组读取图像像素
for (int c = 0; c < ch; c++)
{
for (int row = 0; row < height; row++)
{
for (int col = 0; col < width; col++)
{
if (ch == 3)
{
Vec3b bgr = src.at<Vec3b>(row, col);
bgr[0] = 255 - bgr[0]; //蓝 rgb 最大值为255,最终图像取反
bgr[1] = 255 - bgr[1]; //绿
bgr[2] = 255 - bgr[2]; //红
src.at<Vec3b>(row, col) = bgr;
}
else if(ch == 1)
{
int gray = src.at<uchar>(row, col);
src.at<uchar>(row, col) = 255 - gray;
}
}
}
}
imshow("output", src);
waitKey(0);
return 0;
}
2、结果展示
二、指针遍历
1、示例
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char* argv[])
{
Mat src = imread("F:/Cvimage/test.png");
if (src.empty())
{
printf("could not load image....\n");
return -1;
}
namedWindow("input", WINDOW_AUTOSIZE);
imshow("input", src);
int height = src.rows; //读图片高度
int width = src.cols; //读取图片宽度
int ch = src.channels(); //读取图片通道数 rgb:三通道 灰色图像:单通道 rgba:四通道,多一个透明度
//指针读图图片像素
Mat result = Mat::zeros(src.size(), src.type()); //创建一个空白图像
int blue = 0, green = 0, red = 0;
int gray;
for (int c = 0; c < ch; c++)
{
for (int row = 0; row < height; row++)
{
uchar *curr_row = src.ptr<uchar>(row); //获取这一行所有像素点的首地址
uchar *result_row = result.ptr<uchar>(row);
for (int col = 0; col < width; col++)
{
if (ch == 3)
{
//一个像素点有3个像素值,红、绿、蓝,
blue = *curr_row++;
green = *curr_row++;
red = *curr_row++;
*result_row++ = blue;
*result_row++ = green;
*result_row++ = red;
}
else if(ch == 1)
{
gray = *curr_row++;
*result_row++ = gray;
}
}
}
}
imshow("reslut", result);
waitKey(0);
return 0;
}
2、结果展示
相关阅读
Collins COBUILD Advanced Dictionary(柯林斯高级英语
柯林斯高级英语学习词典特别标示了数千个对读者最有帮助的语法结构、用法,并附有插图。并包含有许多实际应用中常见的重要词汇及语
前言: Direct3D是一套底层的API,即:应用程序接口。Direct3D主要用来开启硬件加速功能来绘制3D场景,它可以看做是应用程序和图形设备(3D
文章一直在修改,之前学了外部中断和定时/计数器中断,对中断设置流程感觉比较清晰。学串行通信时,又用到中断,而且多了几步设置,回头看
C/C++ 学习笔记:istringstream、ostringstream、string
0、C++的输入输出分为三种:(1)基于控制台的I/O(2)基于文件的I/O(3)基于字符串的I/O 1、头文件[cpp] view plaincopyprint? #incl
最小二乘法是求线性回归问题最基础的方法之一,最近花了一点时间深入研究了一下,然后简单的整理一下思路。 先从一个简单的例子开始,