Image 将负值赋给像素

Image 将负值赋给像素,image,matlab,opencv,image-processing,pixel,Image,Matlab,Opencv,Image Processing,Pixel,使用一些标准,图像中有一些像素我不感兴趣。所以,我想忽略它们。我只是想问,我所采取的方法是否可以接受。我给这些像素赋值为负值。那可以接受吗?当一个像素值为负值时,它意味着什么?它会在图像上有一些表示吗?这取决于您如何使用图像。像素中的负值没有任何实数表示。但是如果您使用Matlab函数imshow(img,[])它将缩放所有值,并将-1视为最小的数字(因此它将在输出中表示) 最好使用遮罩。掩码是一个与图像大小相同的二进制数组,用于指示像素是否有效(1)(0) 例如,在OpenCV中有许多函数可以

使用一些标准,图像中有一些像素我不感兴趣。所以,我想忽略它们。我只是想问,我所采取的方法是否可以接受。我给这些像素赋值为负值。那可以接受吗?当一个像素值为负值时,它意味着什么?它会在图像上有一些表示吗?

这取决于您如何使用图像。像素中的负值没有任何实数表示。但是如果您使用Matlab函数
imshow(img,[])
它将缩放所有值,并将-1视为最小的数字(因此它将在输出中表示)

最好使用遮罩。掩码是一个与图像大小相同的二进制数组,用于指示像素是否有效(1)(0)

例如,在OpenCV中有许多函数可以使用掩码(最后一个参数
const CvArr*mask=NULL
)。 下面是一个如何在OpenCV中使用遮罩的示例:

Mat srcImage; //RGB source image

//Create a mask. Here we select a rectangle:
Mat mask = Mat::zeros(srcImage.size(), CV_8U);  // type of mask is CV_8U
Mat roi(mask, cv::Rect(10,10,100,100));
roi = Scalar(255, 255, 255);

//Apply any function to the srcImage ONLY in the points selected by a mask
SurfFeatureDetector detector();
std::vector<KeyPoint> keypoints;
detector.detect(srcImage, keypoints, mask);     // passing `mask` as a parameter
Mat图像//RGB源图像
//创建一个掩码。这里我们选择一个矩形:
Mat mask=Mat::zeros(srcImage.size(),CV_8U);//遮罩类型为CV_8U
Mat roi(掩模,cv::Rect(10,10100100));
roi=标量(255、255、255);
//仅在遮罩选择的点上对srcImage应用任何函数
SurfFeatureDetector检测器();
向量关键点;
检测器。检测(SRC图像、关键点、掩码);//将'mask'作为参数传递

这取决于您如何使用图像。像素中的负值没有任何实数表示。但是如果您使用Matlab函数
imshow(img,[])
它将缩放所有值,并将-1视为最小的数字(因此它将在输出中表示)

最好使用遮罩。掩码是一个与图像大小相同的二进制数组,用于指示像素是否有效(1)(0)

例如,在OpenCV中有许多函数可以使用掩码(最后一个参数
const CvArr*mask=NULL
)。 下面是一个如何在OpenCV中使用遮罩的示例:

Mat srcImage; //RGB source image

//Create a mask. Here we select a rectangle:
Mat mask = Mat::zeros(srcImage.size(), CV_8U);  // type of mask is CV_8U
Mat roi(mask, cv::Rect(10,10,100,100));
roi = Scalar(255, 255, 255);

//Apply any function to the srcImage ONLY in the points selected by a mask
SurfFeatureDetector detector();
std::vector<KeyPoint> keypoints;
detector.detect(srcImage, keypoints, mask);     // passing `mask` as a parameter
Mat图像//RGB源图像
//创建一个掩码。这里我们选择一个矩形:
Mat mask=Mat::zeros(srcImage.size(),CV_8U);//遮罩类型为CV_8U
Mat roi(掩模,cv::Rect(10,10100100));
roi=标量(255、255、255);
//仅在遮罩选择的点上对srcImage应用任何函数
SurfFeatureDetector检测器();
向量关键点;
检测器。检测(SRC图像、关键点、掩码);//将'mask'作为参数传递

如果您的数据类型允许,如有符号整数(CV_32S)或浮点(CV_32F或CV_64F),则使用负值非常有意义,这是指定忽略像素的常用方法。在这种情况下,除了你对负值的解释之外,它没有什么特殊的意义


另一方面,如果使用8位无符号图像(CV_8U),则可能会导致错误:它可能会被截断为零,或者使用模256加法转换为[0255],具体取决于您的opencv版本。在最坏的情况下,如果您以非常糟糕的方式访问像素数据,它也可能溢出到相邻像素并修改其值。因此,如果您使用8位图像,您应该使用掩码来指定忽略的像素,正如phyrox解释的那样

如果您的数据类型允许,如有符号整数(CV_32S)或浮点(CV_32F或CV_64F),则使用负值是非常有意义的,这是一种非常常见的指定忽略像素的方法。在这种情况下,除了你对负值的解释之外,它没有什么特殊的意义


另一方面,如果使用8位无符号图像(CV_8U),则可能会导致错误:它可能会被截断为零,或者使用模256加法转换为[0255],具体取决于您的opencv版本。在最坏的情况下,如果您以非常糟糕的方式访问像素数据,它也可能溢出到相邻像素并修改其值。因此,如果您使用8位图像,您应该使用掩码来指定忽略的像素,正如phyrox解释的那样

我想忽略它们。
您只需忽略它,然后对其他像素执行操作。关于设置负像素,如果图像的数据类型支持,可以。但是,寻找物理表征是没有意义的。像素值表示该像素的强度,对于灰度,通常0表示最低(黑色),255表示最高(白色)。所以我认为问负像素的强度是什么是没有意义的。因为大多数图像都有无符号像素类型,这看起来不可行。但是有几个opencv操作允许您指定一个掩码(比如op仅在掩码为非空的情况下应用)许多可用的掩码示例,例如,
我想忽略它们。
您只是忽略它,对其他像素进行操作。关于设置负像素,如果图像的数据类型支持,可以。但是,寻找物理表征是没有意义的。像素值表示该像素的强度,对于灰度,通常0表示最低(黑色),255表示最高(白色)。所以我认为问负像素的强度是什么是没有意义的。因为大多数图像都有无符号像素类型,这看起来不可行。但是有几个opencv操作允许您指定一个掩码(比如op仅在掩码为非空的情况下应用)许多可用的掩码示例,例如。