C++ opencv学习之图像像素的逻辑操作
作者:打酱油的;
1.API和相关知识
1. rectangele 绘制矩形
共7个参数
第1个参数 输入
第2个参数 矩形左上坐标
第3个参数 矩形右下坐标
第4个参数 矩形颜色
第5个参数 线宽
如果参数 >=0,则表示绘制矩形(如为1,表示绘制的矩形边为1个像素)
如果参数 < 0,则表示填充矩形(如-1,表示填充整个矩形)
第6个参数 lineType
关于图像锯齿,有几种方式处理
不管不顾,就用LINE_4 或者 LINE_8
消除锯齿,就用LINE_AA (AA就是反锯齿)
第7个参数 缩小图像,同时缩短矩形左上顶点与(0,0)位置的距离(一般没用)
0表示不变
1表示图像*1/2,同时距离(0,0)的x方向和y方向距离*1/2
2表示图像*(1/2)^2,同时距离(0,0)的x方向和y方向距离*(1/2)^2
第二种
rectangele
绘制矩形
共6个参数
第1个参数 输入
第2个参数 矩形的左上点+往对角方向延伸的距离(x1,x2,延伸长度1,延伸长度2)
第3个参数 矩形颜色
第4个参数 线宽
如果参数 >=0,则表示绘制矩形(如为1,表示绘制的矩形边为1个像素)
如果参数 < 0,则表示填充矩形(如-1,表示填充整个矩形)
第5个参数 lineType
关于图像锯齿,有几种方式处理
不管不顾,就用LINE_4 或者 LINE_8
消除锯齿,就用LINE_AA (AA就是反锯齿)
第6个参数 缩小图像,同时缩短矩形左上顶点与(0,0)位置的距离
0表示不变
1表示图像*1/2,同时距离(0,0)的x方向和y方向距离*1/2
2表示图像*(1/2)^2,同时距离(0,0)的x方向和y方向距离*(1/2)^2
void QuickDemo::bitwise_demo(Mat& image) { Mat m1 = Mat::zeros(Size(256, 256), CV_8UC3); Mat m2 = Mat::zeros(Size(256, 256), CV_8UC3); //rectangle有两种传参方式,这里分别进行了示范 rectangle(m1, Point(100, 100), Point(180, 180), Scalar(255, 255, 0), -1, LINE_8,0); rectangle(m2, Rect(150, 150, 80, 80), Scalar(0, 255, 255), -1, LINE_8, 0); imshow("m1", m1); imshow("m2", m2); }
2.位运算
在opencv中,图像的为运算有4种
- 与
- 或
- 非
- 异或
bitwise_and(m1, m2, dst);
//bitwise_or(m1, m2, dst);
//bitwise_not(m1, dst);
//bitwise_xor(m1, m2, dst);略
2.实例代码
void QuickDemo::bitwise_demo(Mat& image) { Mat m1 = Mat::zeros(Size(256, 256), CV_8UC3); Mat m2 = Mat::zeros(Size(256, 256), CV_8UC3); rectangle(m1, Point(100, 100), Point(180, 180), Scalar(255, 255, 0), -1, LINE_4,0); rectangle(m2, Rect(150, 150, 80, 80), Scalar(0, 255, 255), -1, 0); Mat dst; bitwise_and(m1, m2, dst); //bitwise_or(m1, m2, dst); //bitwise_not(m1, dst); //bitwise_xor(m1, m2, dst); imshow("位运算",dst); }
补充:OpenCV--C++图像像素处理-二值化
#include<opencv2/opencv.hpp> #include<iostream> #include<vector> using namespace std; using namespace cv; int main() { Mat img = imread("colors.jpg"); if (img.empty()) { cout << "图片读取失败" << endl; } Mat gray; cvtColor(img, gray, COLOR_BGR2GRAY); //将RGB图像img转为灰度图gray // 彩图BINARY二值化 Mat binary, binary_inv; threshold(img, binary, 125, 255, THRESH_BINARY); threshold(img, binary_inv, 125, 255, THRESH_BINARY_INV); imshow("binary", binary); imshow("binary_inv", binary_inv); //灰度图BINARY二值化 Mat binary_gray, binary_gray_inv; threshold(gray, binary_gray, 125, 255,THRESH_BINARY); threshold(gray, binary_gray_inv,125, 255, THRESH_BINARY_INV); imshow("binary_gray", binary_gray); imshow("binary_gray_inv", binary_gray_inv); //灰度图TOZERO二值化 Mat tozero_gray, tozero_gray_inv; threshold(gray, tozero_gray, 125, 255, THRESH_TOZERO); threshold(gray, tozero_gray_inv, 125, 255, THRESH_TOZERO_INV); imshow("tozero_gray", binary_gray); imshow("tozero_gray_inv", binary_gray_inv); //灰度图TRUNC二值化 Mat trunc_gray; threshold(gray, trunc_gray, 125, 255, THRESH_TRUNC); imshow("trunc_gray", trunc_gray); Mat gray_thr = imread("colors.jpg", IMREAD_GRAYSCALE); //灰度图OSTU二值化 Mat otsu_gray; threshold(gray_thr, otsu_gray, 100, 255,THRESH_BINARY | THRESH_OTSU); imshow("trunc_gray", otsu_gray); //灰度图triangle二值化 Mat triangle_gray; threshold(gray_thr, triangle_gray, 100, 255, THRESH_BINARY | THRESH_TRIANGLE); imshow("triangle_gray", triangle_gray); //灰度图自适应二值化 Mat adapt_mean_gray; adaptiveThreshold(gray_thr, adapt_mean_gray, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 55, 0); imshow("adapt_mean_gray", adapt_mean_gray); Mat adapt_gauss_gray; adaptiveThreshold(gray_thr, adapt_gauss_gray, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 55, 0); imshow("adapt_gauss_gray", adapt_gauss_gray); waitKey(0); return 0; }
总结
到此这篇关于C++ opencv学习之图像像素的逻辑操作的文章就介绍到这了,更多相关C++ opencv图像像素逻辑操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!