中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

做網(wǎng)站需要多少資金如何建立個(gè)人網(wǎng)址

做網(wǎng)站需要多少資金,如何建立個(gè)人網(wǎng)址,網(wǎng)站建設(shè)與規(guī)劃總結(jié),微信微網(wǎng)站制作公司OpenCV涉及的常用數(shù)據(jù)類型除包含C的基本數(shù)據(jù)類型,如:char、uchar,int、unsigned int,short 、long、float、double等數(shù)據(jù)類型外, 還包含Vec,Point、Scalar、Size、Rect、RotatedRect、Mat等類。C中的基本數(shù)據(jù)類型不需再做說明下面重點(diǎn)介紹一下…

????????OpenCV涉及的常用數(shù)據(jù)類型除包含C++的基本數(shù)據(jù)類型,如:char、uchar,int、unsigned int,short 、long、float、double等數(shù)據(jù)類型外, 還包含Vec,Point、Scalar、Size、Rect、RotatedRect、Mat等類。C++中的基本數(shù)據(jù)類型不需再做說明下面重點(diǎn)介紹一下OpenCV中特有的與數(shù)據(jù)或數(shù)據(jù)處理相關(guān)的常用類。

Vec類

????????Vec類是表示固定長度向量的模板類。它與vector相似,如初始化,元素訪問等,與vector不同的是: 因Vec試固定長度向量模板類,在聲明實(shí)例化時(shí)對(duì)象時(shí),除指定類型外,還得指定長度,在聲明vector實(shí)例化對(duì)象時(shí),除需指定類型外,長度則不是必需的。另外,Vec對(duì)象除可以賦值運(yùn)算符外,Vec對(duì)象還可以直接參與“算術(shù)運(yùn)算”,而vector對(duì)象雖然可以使用賦值運(yùn)算符,但不能直接參與“算術(shù)運(yùn)算”。

????????OpenCV中已經(jīng)預(yù)定義了多個(gè)可以直接使用的Vec類型別名,如下:

????????typedef?Vec<?uchar, 2 >??cv::Vec2b

????????typedef?Vec<?uchar, 3 >??cv::Vec3b

????????typedef?Vec<?uchar, 4 >??cv::Vec4b

????????typedef?Vec< short, 2 >??cv::Vec2s

????????typedef?Vec< short, 3?>??cv::Vec3s

????????typedef?Vec< short, 4>??cv::Vec4s

????????typedef?Vec<?ushort, 2 >??cv::Vec2w

? ? ? ? typedef?Vec<?ushort, 3>??cv::Vec3w

? ? ? ??typedef?Vec<?ushort, 24>??cv::Vec4w

????????typedef?Vec< int, 2 >??cv::Vec2i

????????typedef?Vec< int, 3?>??cv::Vec3i

????????typedef?Vec< int, 4?>??cv::Vec4i

????????typedef?Vec< int, 6?>??cv::Vec6i

?????????typedef?Vec< int, 8>??cv::Vec8i

????????typedef?Vec< float, 2 >??cv::Vec2f

????????typedef?Vec< float, 3?>??cv::Vec3f

????????typedef?Vec< float, 4>??cv::Vec4f

????????typedef?Vec< float, 6?>??cv::Vec6f

????????typedef?Vec< double, 2 >???cv::Vec2d

????????typedef?Vec< double, 3>? ? ?cv::Vec3d

????????typedef?Vec< double, 4?>? ???cv::Vec4d

????????typedef?Vec< double, 6?>? ???cv::Vec6d

????????現(xiàn)在以實(shí)例演示一下Vector與Vec用法上的區(qū)別。下面程序,編譯是不會(huì)出錯(cuò)的。

如果修改一下,加入算術(shù)運(yùn)算代碼, 如下:

可以看出·還沒有編譯,就·有·錯(cuò)誤·提示·,說明vector對(duì)象·是不可以與常數(shù)相乘的。

Vec類型對(duì)象可以與標(biāo)量進(jìn)行乘除,下面的程序則可以通過編譯,不會(huì)報(bào)錯(cuò):

該程序試運(yùn)行,結(jié)果如下:

需注意的是,Vec對(duì)象的算術(shù)運(yùn)算并非真正數(shù)學(xué)上的算術(shù)運(yùn)算,只是重載了算術(shù)運(yùn)算符。Vec實(shí)例化對(duì)象可以被標(biāo)量乘或除,結(jié)果是Vec對(duì)象的每一個(gè)元素都被標(biāo)量乘或除。Vec對(duì)象可以做乘數(shù)、被乘數(shù)、被除數(shù),但不可做除數(shù)。下面是一個(gè)Vec與標(biāo)量乘、除的示例程序代碼:

試運(yùn)行,結(jié)果如下:

Vec對(duì)象間可以做“+”、“-”運(yùn)算,運(yùn)算的Vec對(duì)象的類型及長度須相同。下面是一個(gè)Vec對(duì)象“+”、“-”運(yùn)算的示例程序:

試運(yùn)行,結(jié)果如下:

Vec對(duì)象的乘積 Vec對(duì)象可以相乘,存在乘積、點(diǎn)積與叉積之分。Vec對(duì)象要進(jìn)行乘運(yùn)算也需類型與長度相同,不符合乘法交換律。下面是一個(gè)Vec對(duì)象相乘、點(diǎn)積、差積的示例程序:?

試運(yùn)行,結(jié)果如下:?

Point(點(diǎn))類

?????????Ponit類也是一個(gè)模版類.

? ? ? ? template<typename _Tp>
????????class cv::Point_< _Tp >

Template class for 2D points specified by its coordinates?x?and?y.

????????template<typename _Tp>
????????class cv::Point3_< _Tp >

Template class for 3D points specified by its coordinates?x,?y?and?z.。

????????Point類與MFC中的CPoint類似,OpenCV的Point類可以看作是存放2個(gè)或3個(gè)int或float值的容器,Point包含的值即點(diǎn)的坐標(biāo)。點(diǎn)有二維點(diǎn)與三位點(diǎn),OpenCV中按數(shù)據(jù)Point類型不同及維度不同預(yù)定義了:Point、Point2d、Point2i,Point2f、Pointe3d、Point3i、Point3f。

????????typedef?Point_<int>?cv::Point2i

????????typedef?Point_<float>?cv::Point2f

????????typedef?Point_<double>?cv::Point2d

????????typedef?Point2i?cv::Point

? ? ? ? typedef?Point3_<double>?cv::Point3d

????????typedef?Point3_<float>?cv::Point3f

????????typedef?Point3_<int>?cv::Point3i

????????Point對(duì)象可以先聲明再賦值,也可用構(gòu)造函數(shù)構(gòu)造Point對(duì)象并初始化。Point 也可被標(biāo)量乘除、Point對(duì)象間也可加減、Point對(duì)象間也可求叉積、點(diǎn)積。下面以實(shí)例演示Point對(duì)象聲明、初始化、及其它運(yùn)算。下面是演示程序的代碼:

// OpenCVBaseData.cpp : 此文件包含 "main" 函數(shù)。程序執(zhí)行將在此處開始并結(jié)束。#include<opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main()
{Point p1;p1.x = 100;p1.y = 100;Point p2(200, 100);Point2d p2d1(100,127);Point2d p2d2(10, 123);Point2i p2i1(500, 350);Point2i p2i2(00, 310);Point2f p2f1(13.5, 24.7);Point2f p2f2(350.0, 270.3);Point3d p3d1(15, 25, 35);Point3d p3d2(55, 85, 0);Point3i p3i1(351, 227, 158);Point3i p3i2(11, 127, 18);Point3f p3f1(153.5, 163.1, 191.9);Point3f p3f2(1003, 2465, 381);Point p3,p4;Point2d p2d3, p2d4;Point2i p2i3, p2i4;Point2f p2f3, p2f4;Point3d p3d3, p3d4;Point3i p3i3, p3i4;Point3f p3f3, p3f4;p3 = p1 + p2;cout << "p3:" << endl;cout << p3 << endl;p4 = p1 * 2;cout << "p4:" << endl;cout << p4 << endl;cout << p1.dot(p2) << endl;cout << p4.cross(p1) << endl;cout << p4.ddot(p2) << endl;p2d3 = p2d1 / 2;p2d4 = p2d1 - p2d2;cout << "p2d3:" << endl;cout << p2d3 << endl;cout << "p2d4:" << endl;cout << p2d4 << endl;cout << p2d4.ddot(p2d1) << endl;cout << p2d4.dot(p2d1) << endl;cout << p2d4.cross(p2d1) << endl;p2i3 = p2i1 / 2;p2i4 = p2i1 - p2i2;cout << "p2i3:" << endl;cout << p2i3 << endl;cout << "p2i4:" << endl;cout << p2i4 << endl;cout << p2i4.ddot(p2i1) << endl;cout << p2i4.dot(p2i1) << endl;cout << p2i4.cross(p2i1) << endl;p2f3 = p2i1 / 2;p2f4 = p2i1 - p2i2;cout << "p2f3:" << endl;cout << p2f3 << endl;cout << "p2f4:" << endl;cout << p2f4 << endl;cout << p2f4.ddot(p2f1) << endl;cout << p2f4.dot(p2f1) << endl;cout << p2f4.cross(p2f1) << endl;p3d3 = p3d1 / 2;p3d4 = p3d1 - p3d2;cout << "p3d3:" << endl;cout << p3d3 << endl;cout << "p3d4:" << endl;cout << p3d4 << endl;cout << p3d4.ddot(p3d1) << endl;cout << p3d4.dot(p3d1) << endl;cout << p3d4.cross(p3d1) << endl;p3i3 = p3i1 / 2;p3i4 = p3i1 - p3i2;cout << "p3i3:" << endl;cout << p3i3 << endl;cout << "p3i4:" << endl;cout << p3i4 << endl;cout << p3i4.ddot(p3i1) << endl;cout << p3i4.dot(p3i1) << endl;cout << p3i4.cross(p3i1) << endl;p3f3 = p3i1 / 2;p3f4 = p3i1 - p3i2;cout << "p3f3:" << endl;cout << p3f3 << endl;cout << "p3f4:" << endl;cout << p3f4 << endl;cout << p3f4.ddot(p3f1) << endl;cout << p3f4.dot(p3f1) << endl;cout << p3f4.cross(p3f1) << endl;waitKey(0);return 0;
}

試運(yùn)行,結(jié)果如下:

OpenCV的點(diǎn)對(duì)象加、減運(yùn)算需是相同類型及相同維度,而叉積與點(diǎn)積運(yùn)算,則需是相同維度的Point才能進(jìn)行。

Scalar(標(biāo)量)類

????????Scalar類(標(biāo)量類)實(shí)際上是一個(gè)四維雙精度向量類。Scalar的公有成員函數(shù)如下:

Scalar?()=default

Scalar?(double v0)

Scalar?(double v0, double v1, double v2=0, double v3=0)

const double &? operator[]?(int i) const

double & operator[]?(int i)

前三個(gè)為構(gòu)造函數(shù),后面兩個(gè)為[]操作符重載函數(shù)。

Scalar有一個(gè)靜態(tài)工有成員函數(shù),如下:

static?Scalar? all?(double v0)

Scalar有一個(gè)公有屬性,如下:

double val?[4] = {0}

下面以實(shí)例演示Scalar對(duì)象創(chuàng)建,及公有屬性的訪問等。示例程序的代碼如下:

// OpenCVBaseData.cpp : 此文件包含 "main" 函數(shù)。程序執(zhí)行將在此處開始并結(jié)束。#include<opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main()
{Scalar s1= Scalar();Scalar s2;s1[0] = 125;s1[1] = 125;s1[2] = 125;s1[3] = 0;s2 = s1.all(111);cout << "s1;  " << s1 << endl;cout << "s2;  " << s2 << endl;Scalar s3(127.0);cout << "s3;  " << s3 << endl;Scalar s4(120,255,110,0);cout << "s4;  " << s4 << endl;double d1, d2;d1 = s4.val[0];d2 = s4[3];cout << "d1: " << d1 <<endl;cout << "d2: " << d2 << endl;waitKey(0);return 0;
}

試運(yùn)行,結(jié)果如下:

Size(尺寸)類?

????????Size類比較簡單,它有兩個(gè)公有屬性變量width、height。Size類重載了賦值操作符“=”。Size類的構(gòu)造函數(shù)如下:

?????? Size?()=default

?????? Size?(int _width, int _height)

?????? Size?(const?cv::Size?&other)

Size因數(shù)據(jù)類型不同又可細(xì)分為:Size2dSize2iSize2f。下面以實(shí)例演示Size對(duì)象聲明及初始化等操作。實(shí)例程序代碼如下:

// OpenCVBaseData.cpp : 此文件包含 "main" 函數(shù)。程序執(zhí)行將在此處開始并結(jié)束。#include<opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main()
{Size s1 = Size();s1.width = 100;s1.height = 150;Size s2(110, 330);Size s3(s1);cout << "s1:  " << s1 << endl;cout << "s2:  " << s2 << endl;cout << "s3:  " << s3 << endl;Size2d s2d1(100,200);Size2i s2i1(1000, 2000);Size2f s2f1(1.00, 2.00);cout << "s2d1:  " << s2d1 << endl;cout << "s2i1:  " << s2i1 << endl;cout << "s2f1:  " << s2f1 << endl;waitKey(0);return 0;
}

試運(yùn)行,結(jié)果如下:

Rect(矩形)類?

Rect類中以矩形的左上角坐標(biāo)及矩形寬度與高度來定義一個(gè)矩形。Rect類共有4個(gè)公有屬性變量:int x,int y,int? _width, int? _height。Rect類重載了賦值操作符“=”。Rect類的構(gòu)造函數(shù)如下:

Rect?()=default

Rect?(int _x, int _y, int _width, int _height)

?????? Rect?(const?cv::Rect?&other)

?????? 因數(shù)據(jù)類型不同,同樣也有Rect2dRect2iRect2f

可是用Point類的inside函數(shù)判定一個(gè)點(diǎn)是否在矩形內(nèi)。下面以實(shí)例演示,Rect類對(duì)象聲明、初始化等。示例程序的代碼如下:

// OpenCVBaseData.cpp : 此文件包含 "main" 函數(shù)。程序執(zhí)行將在此處開始并結(jié)束。#include<opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main()
{Rect rec1(0, 0, 100, 100);Rect rec2(rec1);Rect rec3 = rec2;cout << "rec1:  " << endl;cout << "x:  " << rec1.x << "  " << "y:  " << rec1.y << "  " << "width:  " << rec1.width << "  " << "height:  " << rec1.height << endl;cout << "rec2:  " << endl;cout << "x:  " << rec2.x << "  " << "y:  " << rec2.y << "  " << "width:  " << rec2.width << "  " << "height:  " << rec2.height << endl;Rect2d rec2d1(0, 0, 233, 233);Rect2i rec2i1(0, 0, 500, 500);Rect2f rec2f1(0, 0, 235.1, 500.0);Point p1(50, 250);if (p1.inside(rec2d1))cout << "p1 is inisde of rec2d1 " << endl;elsecout << "p1 is not inisde of rec2d1 "<< endl;if (p1.inside(rec2i1))cout << "p1 is inisde of rec2i1 " << endl;elsecout << "p1 is not inisde of rec2i1 " << endl;if (p1.inside(rec2f1))cout << "p1 is inisde of rec2f1 " << endl;elsecout << "p1 is not inisde of rec2f1 " << endl;waitKey(0);return 0;
}

試運(yùn)行,結(jié)果如下:

????????Rect對(duì)象可以進(jìn)行“==”判定,“|”運(yùn)算、“&”運(yùn)算。下面以實(shí)例做演示,演示代碼如下:?

// OpenCVBaseData.cpp : 此文件包含 "main" 函數(shù)。程序執(zhí)行將在此處開始并結(jié)束。#include<opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main()
{Rect rec1(0, 0, 300, 300);Rect rec2(100, 100, 500, 500);if (rec1 == rec2)cout << "rec1 equals rec2" << endl;elsecout << "rec1 does not equal rec2" << endl;Rect rec3 = rec1 & rec2;cout << rec3 << endl;Rect rec4 = rec1 | rec2;cout << rec4 << endl;waitKey(0);return 0;
}

試運(yùn)行,結(jié)果如下:

RotatedRect(旋轉(zhuǎn)矩形)類?

RotatedRect類與Rect類的不同點(diǎn)是,Rect類所表示的矩形是水平放置的,而RotatedRect類所表示的矩形則是以任意角度放置的,相當(dāng)于在Rect表示的矩形基礎(chǔ)上再旋轉(zhuǎn)一個(gè)角度。

RotatedRect類的公有成員函數(shù)有一下幾個(gè):

RotatedRect?()

RotatedRect?(const?Point2f?&center, const?Size2f?&size, float?angle)

參數(shù):center 矩形的質(zhì)心,size 矩形的長寬尺寸,angle 旋轉(zhuǎn)角度(順時(shí)針方向旋轉(zhuǎn))

RotatedRect?(const?Point2f?&point1, const?Point2f?&point2, const?Point2f?&point3)

參數(shù): point1 矩形的第一個(gè)點(diǎn),point2 矩形的第二個(gè)點(diǎn),point3 矩形的第三個(gè)點(diǎn),

Rect boundingRect?() const

返回包含旋轉(zhuǎn)矩形對(duì)象所表示旋轉(zhuǎn)矩形的最小矩形,數(shù)據(jù)類型為int

Rect<float> boundingRect2f?() const

返回包含旋轉(zhuǎn)矩形對(duì)象所表示旋轉(zhuǎn)矩形的最小矩形,數(shù)據(jù)類型為float

void points?(Point2f?pts[]) const

用旋轉(zhuǎn)矩形對(duì)象所表示矩形的角點(diǎn)填充Point2f 點(diǎn)數(shù)組

void points?(std::vector<?Point2f?> &pts) const

用旋轉(zhuǎn)矩形對(duì)象所表示矩形的角點(diǎn)填充Point2f 點(diǎn)數(shù)組

RotatedRect類的公有屬性成員變量有一下幾個(gè):

float angle 旋轉(zhuǎn)角度,以度表示

Pointe2f center? 矩形的質(zhì)心

Size2f?? size??? 代表矩形長寬的尺寸

?????? 下面以實(shí)例演示RotatedRect對(duì)象構(gòu)造及其它成員函數(shù)的用法。示例代碼如下:

#include<opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main()
{Mat background(600, 1200, CV_8UC3, Scalar(127, 127, 127));string vertex_names[4] = { "1","2","3","4" };Point2f vertices[4];RotatedRect rRect = RotatedRect(Point2f(600, 300), Size2f(100, 50), 30);rRect.points(vertices);for (size_t i = 0; i < 4; i++){line(background, vertices[i], vertices[(i + 1) % 4], Scalar(0, 0, 255), 1);putText(background, vertex_names[i], vertices[i], FONT_HERSHEY_SIMPLEX, 1, Scalar(0, 255, 0));}//Rect rec = rRect.boundingRect();Rect2f rec = rRect.boundingRect2f();rectangle(background, rec, Scalar(255, 0, 0), 1, 8, 0);imshow("Image", background);RotatedRect rRect1(Point2f(100, 100), Point2f(400, 100), Point2f(400, 300));cout <<"rRect1 angle:  "<< rRect1.angle << endl;cout << "rRect1 center:  " << rRect1.center << endl;cout << "rRect1 size" << rRect1.size << endl;waitKey(0);return 0;
}

試運(yùn)行,結(jié)果如下:

Mat 類?

????????Mat類在前面的文章中已經(jīng)詳細(xì)介紹這里不再做說明。這里介紹一下Mat對(duì)象矩陣數(shù)據(jù)的位操作及矩陣運(yùn)算。假如一個(gè)Mat對(duì)象存儲(chǔ)了一副RGB圖像,如何獲取或改變圖像中某一像素的值呢?要做到這一點(diǎn)可以用以下幾種

????????1.?使用Mat類的成員函數(shù)at。

? ? ? ? 2,使用Mat內(nèi)部數(shù)據(jù)指針ptr。

? ? ? ? 3.?使用Mat的數(shù)據(jù)矩陣的數(shù)據(jù)指針data。

? ? ? ? 4. 使用迭代器

下面用一個(gè)實(shí)例來演示以上幾種Mat數(shù)據(jù)位操作方法。示例代碼如下:

// OpeCVSharp.cpp : 此文件包含 "main" 函數(shù)。程序執(zhí)行將在此處開始并結(jié)束。#include <iostream>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;int main()
{Mat src = imread("1.jpg");if (src.empty()){cout << "Cann't load image!" << endl;return -1;}cout <<"src.cols:" << src.cols << endl;cout << "src.rows:" << src.rows << endl;cout << "src channels:" << src.channels() << endl;cout << "src type:" << src.type() << endl;//獲取第0排0列像素BGR值uchar b = src.at<uchar>((0, 0), 0);uchar g = src.at<uchar>((0, 0), 1);uchar r = src.at<uchar>((0, 0), 2);cout << "BGR:" << (int)b << "  " << (int)g << "  " << (int)r << endl;uchar* puchar = src.ptr(0, 0);uchar b1 = puchar[0];uchar g1 = puchar[1];uchar r1 = puchar[2];cout << "BGR:" << (int)b1 << "  " << (int)g1 << "  " << (int)r1 << endl;uchar b2 = src.data[0];uchar g2 = src.data[1];uchar r2 = src.data[2];cout << "BGR:" << (int)b2 << "  " << (int)g2 << "  " << (int)r2 << endl;//改變第0排0列像素BGR值src.at<uchar>((0, 0), 0) = 0;src.at<uchar>((0, 0), 1) = 0;src.at<uchar>((0, 0), 1) = 255;/*puchar[0] = 0;puchar[0] = 1;puchar[0] = 255;*//*src.data[0] =0;src.data[1] = 0;src.data[2] =255;*///imshow("src", src);waitKey(0);return 0;
}

試運(yùn)行,結(jié)果如下:

Mat對(duì)象實(shí)質(zhì)上是數(shù)據(jù)矩陣,當(dāng)然可以進(jìn)行矩陣運(yùn)算。這里不做全面介紹,僅介紹兩個(gè)有趣的運(yùn)算,與常數(shù)相乘及與常數(shù)向加。

????????先用實(shí)例演示與常數(shù)相乘,示例代碼如下:

// OpeCVSharp.cpp : 此文件包含 "main" 函數(shù)。程序執(zhí)行將在此處開始并結(jié)束。#include <iostream>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;int main()
{Mat src = imread("1.jpg");if (src.empty()){cout << "Cann't load image!" << endl;return -1;}cout <<"src.cols:" << src.cols << endl;cout << "src.rows:" << src.rows << endl;cout << "src channels:" << src.channels() << endl;cout << "src type:" << src.type() << endl;imshow("src", src);src *= 1.5;imshow("src new", src);src *= 0.5;imshow("src new1", src);waitKey(0);return 0;
}

?試運(yùn)行,結(jié)果如下:

可以看出存有圖像的Mat對(duì)象乘以一個(gè)大于1的常數(shù)將使圖像變亮,乘以一個(gè)小于1的常數(shù)使圖像變暗。不難想象,該Mat對(duì)象除以一個(gè)常數(shù)將會(huì)發(fā)生什么現(xiàn)象。

? ? ? ? 再演示一下Mat對(duì)象加、減以一個(gè)常數(shù),示例代碼如下:

// OpeCVSharp.cpp : 此文件包含 "main" 函數(shù)。程序執(zhí)行將在此處開始并結(jié)束。#include <iostream>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;int main()
{Mat src = imread("1.jpg");if (src.empty()){cout << "Cann't load image!" << endl;return -1;}cout <<"src.cols:" << src.cols << endl;cout << "src.rows:" << src.rows << endl;cout << "src channels:" << src.channels() << endl;cout << "src type:" << src.type() << endl;imshow("src", src);src += 20;imshow("src new", src);src -= 40;imshow("src new1", src);waitKey(0);return 0;
}

試運(yùn)行,結(jié)果如下:

????????可以看出,加一個(gè)常數(shù)使圖像變得更藍(lán),減以一個(gè)常數(shù)使圖像變黃,說明加、減都作用在像素的B通道上。?上面是用彩色圖做演示,如果把彩色圖轉(zhuǎn)換成灰度圖結(jié)果又會(huì)如何呢?再用實(shí)例演示一下,下面是演示的示例代碼:

// OpeCVSharp.cpp : 此文件包含 "main" 函數(shù)。程序執(zhí)行將在此處開始并結(jié)束。#include <iostream>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;int main()
{Mat src = imread("1.jpg");if (src.empty()){cout << "Cann't load image!" << endl;return -1;}cout <<"src.cols:" << src.cols << endl;cout << "src.rows:" << src.rows << endl;cout << "src channels:" << src.channels() << endl;cout << "src type:" << src.type() << endl;// imshow("src", src);cvtColor(src, src, COLOR_BGR2GRAY);imshow("src", src);src += 60;imshow("src new", src);src -= 80;imshow("src new1", src);waitKey(0);return 0;
}

試運(yùn)行,結(jié)果如下:

可以看出,對(duì)含灰度圖的Mat對(duì)象加一個(gè)?正數(shù),圖像會(huì)變量,減一個(gè)正數(shù)圖像會(huì)變暗。

下面再演示一下使用迭代器是圖像變亮,示例代碼如下:

// OpeCVSharp.cpp : 此文件包含 "main" 函數(shù)。程序執(zhí)行將在此處開始并結(jié)束。#include <iostream>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;int main()
{Mat src = imread("1.jpg");if (src.empty()){cout << "Cann't load image!" << endl;return -1;}imshow("src", src);/*Mat kernel = (Mat_<float>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);filter2D(src, src, src.depth(), kernel);imshow("src new", src);*///讓圖像變亮MatIterator_<Vec3b> itstart = src.begin<Vec3b>();MatIterator_<Vec3b> itend = src.end<Vec3b>();int temp = src.rows * src.cols;for (; itstart != itend; itstart++){(*itstart)[0] = saturate_cast<uchar>((*itstart)[0] + 50);(*itstart)[1] = saturate_cast<uchar>((*itstart)[1] + 50);(*itstart)[2] = saturate_cast<uchar>((*itstart)[2] + 50);}imshow("src new", src);waitKey(0);return 0;
}

試運(yùn)行結(jié)果如下:

?

本文到此結(jié)束,示例是基于OpenCV4.8(opencv目錄位于d盤根目錄下)及VS2022。

http://www.risenshineclean.com/news/27338.html

相關(guān)文章:

  • 軟件工程畢業(yè)可以做網(wǎng)站嗎購買網(wǎng)站域名
  • 學(xué)做網(wǎng)站要學(xué)什么語言熱狗網(wǎng)站關(guān)鍵詞優(yōu)化
  • 寧波seo網(wǎng)絡(luò)推廣推薦公眾號(hào)seo工資水平
  • 子網(wǎng)站怎么建設(shè)產(chǎn)品營銷策略有哪些
  • 旅游網(wǎng)站有哪些功能指數(shù)基金什么意思
  • 手機(jī)賺錢網(wǎng)站新河seo怎么做整站排名
  • iis搭建網(wǎng)站seo學(xué)校培訓(xùn)課程
  • 長沙交互網(wǎng)站設(shè)計(jì)服務(wù)商愛站網(wǎng)seo綜合查詢
  • 網(wǎng)站怎么在百度做推廣看今天的新聞
  • 簡單的手機(jī)網(wǎng)站模板下載國內(nèi)企業(yè)網(wǎng)站模板
  • 網(wǎng)頁美工設(shè)計(jì)課程谷歌優(yōu)化師
  • 網(wǎng)站500m空間夠用嗎seo快速排名源碼
  • 手機(jī)設(shè)計(jì)端點(diǎn)seo博客
  • 網(wǎng)站設(shè)計(jì)班培訓(xùn)北京seo網(wǎng)絡(luò)優(yōu)化招聘網(wǎng)
  • 聯(lián)通公司網(wǎng)站誰做的網(wǎng)絡(luò)營銷的推廣方法有哪些
  • 網(wǎng)站建設(shè)費(fèi)計(jì)入什么科目代運(yùn)營公司排行榜
  • 設(shè)計(jì)網(wǎng)站私單價(jià)格草根seo博客
  • 網(wǎng)站社區(qū)的建設(shè)外鏈生成
  • 商城網(wǎng)站建設(shè)好么百度貼吧怎么做推廣
  • 和一起做網(wǎng)店類似的網(wǎng)站18歲以上站長統(tǒng)計(jì)
  • 論壇網(wǎng)站建設(shè)流程長沙網(wǎng)站推廣工具
  • 找個(gè)免費(fèi)的網(wǎng)站這么難嗎網(wǎng)絡(luò)營銷方式包括哪些
  • 如果給公司做網(wǎng)站搜索引擎優(yōu)化技術(shù)有哪些
  • 網(wǎng)站建設(shè)公司源碼網(wǎng)絡(luò)銷售的工作內(nèi)容
  • 帝國怎么做中英文網(wǎng)站百度seo建議
  • 佛山用戶網(wǎng)站建設(shè)廣州推廣引流公司
  • 福建省建設(shè)廳網(wǎng)站怎么推廣軟件
  • 網(wǎng)站下載下來怎么做后臺(tái)廣東網(wǎng)站營銷seo方案
  • wordpress mohtmlseo搜索引擎優(yōu)化方案
  • 計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)就業(yè)方向網(wǎng)站開發(fā)中國萬網(wǎng)域名注冊(cè)服務(wù)內(nèi)容