(Originally posted by Jingsong Wang on 7/26/2006)
I need to read pixel intensity of each line from a grayscale image using IP macro coding. How can I get the intensity of position at position (I, J) ? Thanks.
(Originally posted by Paul on 7/26/2006)
This code snippet will do the trick, and is flexible enough to do all sorts of other things with:
Dim i As Integer
Dim j As Integer
Dim docId As Integer
Dim docInfo As IPDOCINFO
Dim hstStats(10) As Single
ret = IpDocGet(GETACTDOC, 0, docId)
ret = IpDocGet(GETDOCINFO, docId, docInfo)
'Create AOI per pixel, iterate through height and width of image
For i = 0 To docInfo.height
For j = 0 To docInfo.width
ipRect.Left = j
ipRect.Right = j
ipRect.top = i
ipRect.bottom = i
ret = IpAoiCreateBox(ipRect)
'Get histogram stats
'for a 1x1 AOI, hstStats(0),
'the mean value, will suffice
ret = IpHstGet(GETSTATS, 0, hstStats(0))
Debug.Print Str(i) & ", " & Str(j) & _
": " & Str(hstStats(0))
(Originally posted by KevinR on 7/26/2006)
If you wish to get individual pixel values (rather than statistics for an area/line), take a look at "IpDocGetArea" in the AutoPro help files. This function lets you get areas from an image into an IpBasic array for closer examination.
Thanks for the solutions. I will try IpDocGetLine as well.
BTW, what is the maximun number of 16-bit greyscale data in an one dimension array within IpBasic? How many arrays I can assign ?
(Originally posted by KevinR on 7/28/2006)
Images are limited to 64K on a side - the frame size limit of ~750MB is usually more constraining.
Declare your images and index the arrays with 'Long' variables to avoid short integer limits of +/-32K.
I believe that arrays can have 5 or more dimensions, although I have _never_ found it necessary to create an array with a dimension greater than 3 for any practical purposes. I haven't run into any limits on the number of arrays you can declare, although if you are looking to create one per line of an image I would strongly recommend creating a 2D array instead.