哪种是计算图像点数的正确方法?

Posted

技术标签:

【中文标题】哪种是计算图像点数的正确方法?【英文标题】:Which is the right way to calculate number of points of an image? 【发布时间】:2016-03-19 20:55:08 【问题描述】:

View.Bounds 给了我 (0.0, 0.0, 375.0, 667.0) 的值来帮助计算视图尺寸。而 CGImage,位图的大小给了我 490 像素宽度和 751 像素高度的像素数。我不明白为什么当比例因子给我的值为 2 时,我得到的 UIView 边界内容大小小于 CGImage 像素宽度和高度。但是如何从维度计算点数?如何取出 375.0 和 667.0 并计算?下面的代码帮助我获取视图尺寸和比例因子。

let ourImage: UIImage? = imageView.image
let viewBounds = view.bounds
print("\(viewBounds)")
var scale: CGFloat = UIScreen.mainScreen().scale
print("\(scale)")

这是我用来接收 490 * 751 像素高度和宽度的代码。

public init?(image: UIImage) 
    guard let cgImage = image.CGImage else  return nil 

    // Redraw image for correct pixel format
    let colorSpace = CGColorSpaceCreateDeviceRGB()

    var bitmapInfo: UInt32 = CGBitmapInfo.ByteOrder32Big.rawValue
    bitmapInfo |= CGImageAlphaInfo.PremultipliedLast.rawValue & CGBitmapInfo.AlphaInfoMask.rawValue

    width = Int(image.size.width)
    height = Int(image.size.height)
 .... 

或者我可以使用 (pixelWidth * 2 + pixelHeight * 2) 来计算点数吗?我需要使用主动轮廓法计算或固定点数 (n) 以替代图像分割的进一步方程。

【问题讨论】:

我不明白你在做什么。你究竟为什么要计算图像的大小?应该没关系。这听起来像是一个 XY 问题。 我需要计算或设置图像中的点数,以便在图像分割算法的进一步计算中使用它,需要使用方程中的值。那么我该如何继续计算或设置点数? 哦。所以......图像视图不会调整为图像的大小。图像视图将呈现缩放到图像视图大小的图像表示......但图像本身很可能是不同的大小(它甚至可能具有不同的纵横比)。 image.size.widthimage.size.height 为您提供实际图像的真实测量值。 哦,好的。处理给定的建议。非常感谢。 太好了,答案对我有用。您能否提供它作为答案,以便我可以选择它并提及这个问题作为回答?再次感谢您,我对大小和界限感到困惑。 【参考方案1】:

图像视图不会调整大小以匹配您为其设置的图像属性。您设置的图像也不会调整大小以匹配图像视图的框架。

相反,图像视图呈现的是该图像的表示,缩放到与图像视图匹配的任何大小(基于您选择的规则、宽高比匹配、宽高比填充、比例填充等)。

所以图像的实际大小正是从图像的size 属性返回的大小。

要获取实际图像的实际宽度,请使用:

image.size.width

同样,要获取实际图像的实际高度,请使用:

image.size.height

【讨论】:

以上是关于哪种是计算图像点数的正确方法?的主要内容,如果未能解决你的问题,请参考以下文章

哪种立体匹配算法不是全局匹配算法

计算两个数组之间余弦相似度的正确方法?

图像相似度计算【python】

哪种 Ktor 方法是正确的 - append() 或 buildPacket()?

2个浮点数进行计算

CNN图像分类的小技巧(6): 提升训练效率-混合精度训练