Mat的类型有CV_8UC1,CV_8UC3等,还有Mat_<int>,Mat_<double>等,一开始不理解后面的Mat_<type>的用处,只知道是个模板类,今天算PCA的时候发现两个CV_8UC1类型的Mat相减,负数直接被置零了(废话,因为是unsigned)。
然后又创建了一个CV_8SC1的矩阵作为相减的结果,但是还是为0,想了一下,大概是因为signed和unsigned进行运算时会自转换为unsigned,所以还是不行。
然后想到了Mat_类,试了一下,果然可以,想了一下CV_8UC1等是对图像来说的格式,具有图像格式的意义。但是Mat_类只是个单纯的int或double的矩阵,没有特殊意义,以后在做没有图像意义的运算的时候用Mat_类感觉更佳。
以下是把CV_8UC1转成Mat_<int>进行负值运算
#include <opencv2\opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
Mat src(2,2, CV_8UC1, 11);
Mat_<int> new1 = src;
Mat det(2, 2, CV_8UC1, 24);
Mat_<int> new2 = det;
Mat_<int> result;
result = new1 - new2;
cout << result;
system("pause");
return 0;
}