开发者

C++ opencv学习之图像像素的逻辑操作

开发者 https://www.devze.com 2022-12-02 13:53 出处:网络 作者: 打酱油的;
目录1.API和相关知识1. rectangele 绘制矩形2.位运算2.实例代码补充:OpenCV--C++图像像素处理-二值化总结1.API和相关知识
目录
  • 1.API和相关知识
    • 1. rectangele 绘制矩形
    • 2.位运算
  • 2.实例代码
    • 补充:OpenCV--C++图像像素处理-二值化
      • 总结

        1.API和相关知识

        1. rectangele 绘制矩形

        共7个参数

                    第1个参数 输入

                    第2个参数 矩形左上坐标

                    第3个参数 矩形右下坐标

                    第4个参数 矩形颜色

                    第5个参数 线宽

                                    如果参数 >=0,则表示绘制矩形(如为1,表示绘制的矩形边为1个像素)

                                    如果参数 < 0,则表示填充矩形(如-1,表示填充整个矩形)

                    第6个参数 lineType

                                    关于图像锯齿,有几种方式处理

                                        不管不顾,就用LINE_4 或者 LINE_8

           &编程客栈nbsp;                            消除锯齿,就用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

                  android;                      消除锯齿,就用LINE_AA (AA就是反编程客栈锯齿)python

                    第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);
        }

        C++ opencv学习之图像像素的逻辑操作

        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图像i编程客栈mg转为灰度图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_开发者_Go教程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图像像素逻辑操作内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

        0

        精彩评论

        暂无评论...
        验证码 换一张
        取 消

        关注公众号