opencv_c++学习笔记day2

Mat对象创建

    dst = Mat(src.size(), src.type());//与原图像大小和类型一致
	dst = Scalar(255, 0,0);//给不同通道赋灰度值
	dst = src.clone();//完全拷贝
	src.copyTo(dst);//完全拷贝
	Mat M(3, 3, CV_8UC3, Scalar(0, 255, 0));//创建Mat图像并给三个通道赋值 行,列,8位ucharchannel=3,初值

Mat对象使用

部分复制:一般情况下只会复制Mat对象的头和指针部分,不会复制数据部分
Mat B(A);
完全复制:把Mat对象的头部和数据部分一起复制
Mat F=A.clone()
A.copyTo(F);

图像操作

反差色(三通道独立操作)

#include <opencv2/opencv.hpp>
#include<math.h>
#include<iostream>
using namespace cv;
using namespace std;
//反色操作 熟悉图像三通道独立操作
int main(int agrc, char** agrv) {
	Mat src,dst;
	src = imread("test1.jpg");
	if (!src.data) {
		printf("Not loading...");
		return -1;
	}

	dst.create(src.size(), src.type());
	const int cols = src.cols;
	const int rows = src.rows;
	int num_channels= src.channels();
	for (int row = 0;row < rows;row++) {
		for (int col = 0;col < cols;col++) {
			if (num_channels == 1) {
				int gray = src.at<uchar>(row, col);
				dst.at <uchar>(row,col)= 255 - gray;
			}
			else if (num_channels == 3) {
				int b = src.at<Vec3b>(row, col)[0];
				int g = src.at<Vec3b>(row, col)[1];
				int r = src.at<Vec3b>(row, col)[2];
				dst.at<Vec3b>(row, col)[0] = 255 - b;
				dst.at<Vec3b>(row, col)[1] = 255 - g;
				dst.at<Vec3b>(row, col)[2] = 255 - r;
			}
		}
	}
	imshow("inverse_src", dst);
	waitKey(0);
	return 0;
	}

也可以直接用函数

bitwise_not(src, dst);//颜色反转

读写像素

读一个GRAY像素点的像素值8UC1
Scalar intensity=img.at(y,x);//此时为标量
读一个RGB像素点的像素值
Vec3f intensity =img.at(y,x);//此时为向量
float b=intesity.val[0];

Vec3b与Vec3f

Vec3b对应8U(0-255uchar型)
Vec3f对应32F(0-1float型)
转换数据类型可以用
src.convertTo(dst,type);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值