[英]How to normalize image in openCV?
我是openCV的新手,只停留在一点。
我有一个灰度图像,但是我需要将该图像标准化。 例如:我有一个cv :: mat图像,它可能具有包含一些值和每个索引的矩阵。 由于我有灰色图像,每个索引可能只包含1个值。 现在,我需要将每个值除以255。
C ++中的openCV是否有可用的方法或工具? 对于这种情况,我相信要使用的方法在openCV中称为规范化吗?
cv::Mat originalMat = [OSInference cvMatFromUIImage:imgBeforeProccessing];
cv::Mat img2;
cv::cvtColor(originalMat, img2,CV_BGR2GRAY);
cv::resize(img2, img2, cv::Size(128, 128), 0, 0, CV_INTER_CUBIC);
cv::Mat img3;
现在如何规范化(这意味着将矩阵中的每个值除以255)?
我将垫子图像转换为iOS图像,如下所示:
+ (UIImage *)UIImageFromCVMat:(cv::Mat)cvMat{
NSData *data = [NSData dataWithBytes:cvMat.data length:cvMat.elemSize()*cvMat.total()];
CGColorSpaceRef colorspace;
if (cvMat.elemSize() == 1) {
colorspace = CGColorSpaceCreateDeviceGray();
}else{
colorspace = CGColorSpaceCreateDeviceRGB();
}
CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);
// Create CGImage from cv::Mat
CGImageRef imageRef = CGImageCreate(cvMat.cols, cvMat.rows, 8, 8 * cvMat.elemSize(), cvMat.step[0], colorspace, kCGImageAlphaNone | kCGBitmapByteOrderDefault, provider, NULL, false, kCGRenderingIntentDefault);
// get uiimage from cgimage
UIImage *finalImage = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
CGDataProviderRelease(provider);
CGColorSpaceRelease(colorspace);
return finalImage;
}
OpenCV的功能完全可以满足您的需求。 它称为convertTo
。
cv::Mat img3;
img2.convertTo(img3, CV_32F, 1.0 / 255, 0);
要标准化cv :: Mat,可以使用cv :: normalize。 我写一些代码来帮助您。
uchar data[] = {0, 63, 127, 255};
cv::Mat im(2, 2, CV_8UC1, data), output;
# this what you need 0 -> min value after norm
# 1 -> max value after nom
# cv::NORM_MINMAX normalize for min and max values
cv::normalize(im, output, 0, 1, cv::NORM_MINMAX);
std::cout
<< im << '\n'
<< output << '\n';
#==================================================
# output
[ 0, 63;
127, 255]
[ 0, 0;
0, 1]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.