opencv如何将mat类型的 0 1二值化数据由CV_8UC1转换到CV_32SC1。
convertTo()直接用,有些值变了。m.convertTo(lable,CV_32SC1);结果lable里面部分1变成了0....
convertTo()直接用,有些值变了。m.convertTo(lable, CV_32SC1) ; 结果lable 里面部分1变成了0.
展开
3个回答
展开全部
convertTo是可以转换的。下面随机生成了一个1000*1000的0-1 Mat,转换成CV32SC1后,值并没变。
int main(){
const int w = 1000;
Mat u(w, w, CV_8UC1);
srand(time(NULL));
for(int i=0; i<u.rows; i++)
for(int j=0; j<u.cols; j++)
u.at<uchar>(i,j) = rand()%2;
Mat t;
u.convertTo(t, CV_32SC1);
cout << boolalpha << (t.type() == CV_32SC1) << endl;
for(int i=0; i<u.rows; i++)
for(int j=0; j<u.cols; j++)
if(u.at<uchar>(i,j) != t.at<int>(i,j))cout << "Err";
}
// 将只打印 true
如果你觉得convertTo不对,你可以用 at 把元素一个个取出来复制过去。
展开全部
convertTo是可以转换的。下面随机生成了一个1000*1000的0-1 Mat,转换成CV32SC1后,值并没变。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main(){
const int w = 1000;
Mat u(w, w, CV_8UC1);
srand(time(<a href="https://www.baidu.com/s?wd=NULL&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1d9rj0LmWcYuj-bn1bdnvfs0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6K1TL0qnfK1TL0z5HD0IgF_5y9YIZ0lQzqlpA-bmyt8mh7GuZR8mvqVQL7dugPYpyq8Q1D4rj61PHc4PH6kn1mLPjcdnjT" target="_blank" class="baidu-highlight">NULL</a>));
for(int i=0; i<u.rows; i++)
for(int j=0; j<u.cols; j++)
u.at<uchar>(i,j) = rand()%2;
Mat t;
u.convertTo(t, CV_32SC1);
cout << boolalpha << (t.type() == CV_32SC1) << endl;
for(int i=0; i<u.rows; i++)
for(int j=0; j<u.cols; j++)
if(u.at<uchar>(i,j) != t.at<int>(i,j))cout << "Err";
}
// 将只打印 true
如果你觉得convertTo不对,你可以用 at 把元素一个个取出来复制过去。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main(){
const int w = 1000;
Mat u(w, w, CV_8UC1);
srand(time(<a href="https://www.baidu.com/s?wd=NULL&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1d9rj0LmWcYuj-bn1bdnvfs0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6K1TL0qnfK1TL0z5HD0IgF_5y9YIZ0lQzqlpA-bmyt8mh7GuZR8mvqVQL7dugPYpyq8Q1D4rj61PHc4PH6kn1mLPjcdnjT" target="_blank" class="baidu-highlight">NULL</a>));
for(int i=0; i<u.rows; i++)
for(int j=0; j<u.cols; j++)
u.at<uchar>(i,j) = rand()%2;
Mat t;
u.convertTo(t, CV_32SC1);
cout << boolalpha << (t.type() == CV_32SC1) << endl;
for(int i=0; i<u.rows; i++)
for(int j=0; j<u.cols; j++)
if(u.at<uchar>(i,j) != t.at<int>(i,j))cout << "Err";
}
// 将只打印 true
如果你觉得convertTo不对,你可以用 at 把元素一个个取出来复制过去。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
试试resize?函数得到的好像就是CV_32SC1类型
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询