最近正在使用opencv做一些东西,用的是java api。遇到一个问题,用opencv读取一个灰度图的时候,mat对象的数据类型是CV_8UC1,如果直接使用mat.get(int, int, byte[]);
会导致一个错误,那就是这个8位的无符号数(0-255)会变成8位有符号数,所有超过127的数值都会变成负数。
解决办法有三种:
1. 最土的办法,如果仅仅是想读取一个像素,那么完全可以用mat.get(int, int),这个方法会返回一个double类型的像素值,可以把它强制转换为int等其他类型。
2. 判断每一个像素值,如果是负数,就加上256,也可以解决,不过这办法真心。。。你懂得。
3. 正规的办法,使用mat.convert(mat,CvType.CV_32S),这个方法将会把mat的元素类型转换为其他类型,例如将灰度图的CV_8UC1转换为CV_32S等,这样,就可以使用
mat.get(int, int, int[])方法取得正确的像素值。
附上例子:
public class TestOpenCV
{
public static void main( String[] args