#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<opencv2/opencv.hpp>
#include<vector>
using namespace std;
using namespace cv;
int main()
{
Mat img = imread("filename", 0);//灰度打开
Mat img1 = imread("filename", 1);//彩色打开
Mat img2 = imread("filename", IMREAD_UNCHANGED);//彩色通道打开
imwrite("filename", img);//保存图像
//摄像头 视频
VideoCapture capture;
capture.open("filename", CAP_DSHOW);
capture.open("URL", CAP_ANY);//从URL读取
int height = capture.get(CAP_PROP_FRAME_HEIGHT);//获得视频帧高
int width = capture.get(CAP_PROP_FRAME_WIDTH);//获得视频帧宽
double fps = capture.get(CAP_PROP_FPS);
double count = capture.get(CAP_PROP_FRAME_COUNT);
VideoWriter writer("filename", capture.get(CAP_PROP_FOURCC), fps, Size(width, height));
Mat frame;
while (true)
{
bool ret = capture.read(frame);
if (!ret)break;
imshow("frame", frame);
//此处可添加帧处理
writer.write(frame);
char c = waitKey(100);//等待100ms
if (c == 27)//ESC
{
break;
}
}
capture.release();
writer.release();
//像素操作
Mat m1(Size(width, height), CV_8UC3, Scalar(255, 255, 0));
Mat m2 = Mat::zeros(Size(4, 4), CV_8UC3);
Mat m3 = Mat::ones(Size(4, 4), CV_8UC3);
//拷贝
Mat m4 = m1.clone();
Mat m5;
m1.copyTo(m5);
//ROI区域
Mat image = imread("filename");
Rect rect(200, 200, 200, 200);//(左上角坐标),宽,高
Mat roi = image(rect);
//像素遍历
for (int row = 0; row< image.rows; row++)
{
for (int j = 0; j < image.cols; j ++)
{
image.at<Vec3b>(row, j)[0]= 0;
image.at<Vec3b>(row, j)[1] = 1;
image.at<Vec3b>(row, j)[2] = 2;
}
}
for (int row = 0; row < image.rows; row++)
{
uchar* pptr=image.ptr<uchar>(row);
for (int j = 0; j < image.cols; j++)
{
pptr[j] = j;
}
}
uchar* data = image.data;
for (int i = 0; i < image.rows; i++)
{
for (int j = 0; j < image.cols; j++)
{
*data = i + j;
data++;
}
}
//算数运算
Mat result;
add(m1, m2, result);
subtract(m1, m2, result);
multiply(m1, m2, result);
divide(m1, m2, result);
//位运算
Mat src1, src2,dst;
bitwise_not(src1, dst);
bitwise_xor(src1, src2, dst);
bitwise_or(src1, src2, dst);
bitwise_and(src1, src2, dst);
//图像类型
cvtColor(src1, dst, COLOR_BGR2GRAY);
//通道分离&合并
vector<Mat>mv;
split(image, mv);//分离通道进容器
Mat dst;
merge(mv, dst);//通道合并
//图像直方图
Scalar m_mean = mean(image);//求通道平均
Scalar m_std;
meanStdDev(image, m_mean, m_std);//求均值方差
//直方图计算
vector<Mat>mv;
split(image, mv);
Mat b_channel, g_channel, r_channel;
int channels[] = { 0 };
int histsize[] = { 32 };
float range[] = { 0,256 };
const float* ranges[] = { range };
//输入图像,图像数目,通道索引,mask,输出直方图,分多少块(bin),直方图大小(0-bin),通道的取值范围,是否表示一致性,计算累计直方图
calcHist(&mv[0], 1, channels, Mat(), b_channel,1, histsize, ranges, true, false);
//
//直方图均衡
Mat dst;
equalizeHist(src1, dst);
}
OPENCV 1
最新推荐文章于 2024-06-13 10:17:15 发布