本文整理汇总了C++中FlexImage::setQuantum方法的典型用法代码示例。如果您正苦于以下问题:C++ FlexImage::setQuantum方法的具体用法?C++ FlexImage::setQuantum怎么用?C++ FlexImage::setQuantum使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类FlexImage
的用法示例。
在下文中一共展示了FlexImage::setQuantum方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: testExternal
void testExternal() {
report(0, "testing external image...");
unsigned char buf[EXT_HEIGHT][EXT_WIDTH];
{
for (int x=0; x<EXT_WIDTH; x++) {
for (int y=0; y<EXT_HEIGHT; y++) {
buf[y][x] = 20;
}
}
}
ImageOf<PixelMono> img1;
img1.setExternal(&buf[0][0],EXT_WIDTH,EXT_HEIGHT);
checkEqual(img1.width(),EXT_WIDTH,"width check");
checkEqual(img1.height(),EXT_HEIGHT,"height check");
int mismatch = 0;
for (int x=0; x<img1.width(); x++) {
for (int y=0; y<img1.height(); y++) {
img1.pixel(x,y) = 5;
if (buf[y][x]!=5) {
mismatch++;
}
}
}
checkEqual(mismatch,0,"delta check");
report(0, "testing various padding + alignments...");
for (int ww=1; ww<=17; ww++) {
for (int hh=1; hh<=17; hh++) {
for (int pad1=1; pad1<=9; pad1++) {
for (int pad2=1; pad2<=9; pad2++) {
int wwp1 = (ww%pad1)?(ww+pad1-(ww%pad1)):ww;
FlexImage img;
char *data = new char[wwp1*hh*3];
yAssert(data);
img.setQuantum(pad1);
img.setPixelCode(VOCAB_PIXEL_RGB);
img.setPixelSize(3);
img.setExternal(data,ww,hh);
ImageOf<PixelRgb> target;
target.setQuantum(pad2);
target.copy(img);
delete[] data;
}
}
}
}
}
示例2: getVideo
bool getVideo(ImageOf<PixelRgb>& image) {
if (frameFinished) {
FlexImage flex;
flex.setPixelCode(VOCAB_PIXEL_RGB);
flex.setQuantum((pFrameRGB->linesize[0]));
flex.setExternal(pFrameRGB->data[0],
pCodecCtx->width,
pCodecCtx->height);
image.copy(flex);
}
return frameFinished;
}
示例3: copy
bool Image::copy(const Image& alt, int w, int h) {
if (getPixelCode()==0) {
setPixelCode(alt.getPixelCode());
setPixelSize(alt.getPixelSize());
setQuantum(alt.getQuantum());
}
if (&alt==this) {
FlexImage img;
img.copy(alt);
return copy(img,w,h);
}
if (getPixelCode()!=alt.getPixelCode()) {
FlexImage img;
img.setPixelCode(getPixelCode());
img.setPixelSize(getPixelSize());
img.setQuantum(getQuantum());
img.copy(alt);
return copy(img,w,h);
}
resize(w,h);
int d = getPixelSize();
int nw = w;
int nh = h;
w = alt.width();
h = alt.height();
float di = ((float)h)/nh;
float dj = ((float)w)/nw;
for (int i=0; i<nh; i++)
{
int i0 = (int)(di*i);
for (int j=0; j<nw; j++)
{
int j0 = (int)(dj*j);
memcpy(getPixelAddress(j,i),
alt.getPixelAddress(j0,i0),
d);
}
}
return true;
}
示例4: read
bool Image::read(yarp::os::ConnectionReader& connection) {
// auto-convert text mode interaction
connection.convertTextMode();
ImageNetworkHeader header;
bool ok = connection.expectBlock((char*)&header,sizeof(header));
if (!ok) return false;
//first check that the received image size is reasonable
if (header.width == 0 || header.height == 0)
{
// I maintain the prevous logic, although we should probably return false
return !connection.isError();
}
imgPixelCode = header.id;
int q = getQuantum();
if (q==0) {
//q = YARP_IMAGE_ALIGN;
setQuantum(header.quantum);
q = getQuantum();
}
if (q!=header.quantum) {
if ((header.depth*header.width)%header.quantum==0 &&
(header.depth*header.width)%q==0) {
header.quantum = q;
}
}
// handle easy case, received and current image are compatible, no conversion needed
if (getPixelCode() == header.id && q == header.quantum)
{
return readFromConnection(*this, header, connection);
}
// image is bayer 8 bits, current image is MONO, copy as is (keep raw format)
if (getPixelCode() == VOCAB_PIXEL_MONO && isBayer8(header.id))
{
return readFromConnection(*this, header, connection);
}
// image is bayer 16 bits, current image is MONO16, copy as is (keep raw format)
if (getPixelCode() == VOCAB_PIXEL_MONO16 && isBayer16(header.id))
{
return readFromConnection(*this, header, connection);
}
////////////////////
// Received and current images are binary incompatible do our best to convert
//
// handle here all bayer encoding 8 bits
if (isBayer8(header.id))
{
FlexImage flex;
flex.setPixelCode(VOCAB_PIXEL_MONO);
flex.setQuantum(header.quantum);
bool ok = readFromConnection(flex, header, connection);
if (!ok)
return false;
if (getPixelCode() == VOCAB_PIXEL_BGR && header.id==VOCAB_PIXEL_ENCODING_BAYER_GRBG8)
return deBayer_GRBG8_TO_BGR(flex, *this, 3);
else if (getPixelCode() == VOCAB_PIXEL_BGRA && header.id == VOCAB_PIXEL_ENCODING_BAYER_GRBG8)
return deBayer_GRBG8_TO_BGR(flex, *this, 4);
if (getPixelCode() == VOCAB_PIXEL_RGB && header.id==VOCAB_PIXEL_ENCODING_BAYER_GRBG8)
return deBayer_GRBG8_TO_RGB(flex, *this, 3);
if (getPixelCode() == VOCAB_PIXEL_RGBA && header.id == VOCAB_PIXEL_ENCODING_BAYER_GRBG8)
return deBayer_GRBG8_TO_RGB(flex, *this, 4);
else
{
YARP_FIXME_NOTIMPLEMENTED("Conversion from bayer encoding not yet implemented\n");
return false;
}
}
// handle here all bayer encodings 16 bits
if (isBayer16(header.id))
{
// as bayer16 seems unlikely we defer implementation for later
YARP_FIXME_NOTIMPLEMENTED("Conversion from bayer encoding 16 bits not yet implemented\n");
return false;
}
// Received image has valid YARP pixels and can be converted using Image primitives
// prepare a FlexImage, set it to be compatible with the received image
// read new image into FlexImage then copy from it.
FlexImage flex;
flex.setPixelCode(header.id);
flex.setQuantum(header.quantum);
ok = readFromConnection(flex, header, connection);
if (ok)
copy(flex);
return ok;
}
示例5: wrapIplImage
void Image::wrapIplImage(void *iplImage) {
yAssert(iplImage!=NULL);
IplImage *p = (IplImage *)iplImage;
ConstString str = p->colorModel;
int code = -1;
int color_code = -1;
if (str=="rgb"||str=="RGB"||
str=="bgr"||str=="BGR"||
str=="gray"||str=="GRAY"||
str=="graygray"||str=="GRAYGRAY") {
str = p->channelSeq;
if (str=="rgb"||str=="RGB") {
color_code = VOCAB_PIXEL_RGB;
} else if (str=="bgr"||str=="BGR") {
color_code = VOCAB_PIXEL_BGR;
} else if (str=="gray"||str=="GRAY"||
str=="graygray"||str=="GRAYGRAY") {
color_code = VOCAB_PIXEL_MONO;
} else {
printf("specific IPL RGB order (%s) is not yet supported\n",
str.c_str());
printf("Try RGB, BGR, or \n");
printf("Or fix code at %s line %d\n",__FILE__,__LINE__);
exit(1);
}
}
// Type translation is approximate. Patches welcome to flesh out
// the types available.
if (p->depth == IPL_DEPTH_8U) {
code = color_code;
} else if (p->depth == IPL_DEPTH_8S) {
switch (color_code) {
case VOCAB_PIXEL_MONO:
code = VOCAB_PIXEL_MONO_SIGNED;
break;
case VOCAB_PIXEL_RGB:
code = VOCAB_PIXEL_RGB_SIGNED;
break;
case VOCAB_PIXEL_BGR:
code = color_code; // nothing better available
break;
}
} else if (p->depth == IPL_DEPTH_16U || p->depth == IPL_DEPTH_16S) {
switch (color_code) {
case VOCAB_PIXEL_MONO:
code = VOCAB_PIXEL_MONO16;
break;
case VOCAB_PIXEL_RGB:
case VOCAB_PIXEL_BGR:
fprintf(stderr,"No translation currently available for this pixel type\n");
exit(1);
break;
}
} else if (p->depth == IPL_DEPTH_32S) {
switch (color_code) {
case VOCAB_PIXEL_MONO:
code = VOCAB_PIXEL_INT;
break;
case VOCAB_PIXEL_RGB:
case VOCAB_PIXEL_BGR:
code = VOCAB_PIXEL_RGB_INT;
break;
}
} else if (p->depth == IPL_DEPTH_32F) {
switch (color_code) {
case VOCAB_PIXEL_MONO:
code = VOCAB_PIXEL_MONO_FLOAT;
break;
case VOCAB_PIXEL_RGB:
case VOCAB_PIXEL_BGR:
code = VOCAB_PIXEL_RGB_FLOAT;
break;
}
}
if (code==-1) {
fprintf(stderr,"IPL pixel type / depth combination is not yet supported\n");
fprintf(stderr,"Please email a YARP developer to complain, quoting this:\n");
fprintf(stderr," %s:%d\n", __FILE__, __LINE__);
}
if (getPixelCode()!=code && getPixelCode()!=-1) {
printf("your specific IPL format (%s depth %d -> %s) does not match your YARP format (%s)\n",
str.c_str(),
p->depth,
Vocab::decode(code).c_str(),
Vocab::decode(getPixelCode()).c_str());
printf("Making a copy instead of just wrapping...\n");
FlexImage img;
img.setQuantum(p->align);
img.setPixelCode(code);
img.setExternal(p->imageData,p->width,p->height);
copy(img);
} else {
setQuantum(p->align);
setPixelCode(code);
setExternal(p->imageData,p->width,p->height);
}
}
示例6: read
bool Image::read(yarp::os::ConnectionReader& connection) {
// auto-convert text mode interaction
connection.convertTextMode();
ImageNetworkHeader header;
bool ok = connection.expectBlock((char*)&header,sizeof(header));
if (!ok) return false;
imgPixelCode = header.id;
int q = getQuantum();
if (q==0) {
//q = YARP_IMAGE_ALIGN;
setQuantum(header.quantum);
q = getQuantum();
}
if (q!=header.quantum) {
if ((header.depth*header.width)%header.quantum==0 &&
(header.depth*header.width)%q==0) {
header.quantum = q;
}
}
if (getPixelCode()!=header.id||q!=header.quantum) {
// we're trying to read an incompatible image type
// rather than just fail, we'll read it (inefficiently)
FlexImage flex;
flex.setPixelCode(header.id);
flex.setQuantum(header.quantum);
flex.resize(header.width,header.height);
if (header.width!=0&&header.height!=0) {
unsigned char *mem = flex.getRawImage();
yAssert(mem!=NULL);
if (flex.getRawImageSize()!=header.imgSize) {
printf("There is a problem reading an image\n");
printf("incoming: width %d, height %d, code %d, quantum %d, size %d\n",
(int)header.width, (int)header.height,
(int)header.id,
(int)header.quantum, (int)header.imgSize);
printf("my space: width %d, height %d, code %d, quantum %d, size %d\n",
flex.width(), flex.height(), flex.getPixelCode(),
flex.getQuantum(),
flex.getRawImageSize());
}
yAssert(flex.getRawImageSize()==header.imgSize);
ok = connection.expectBlock((char *)flex.getRawImage(),
flex.getRawImageSize());
if (!ok) return false;
}
copy(flex);
} else {
yAssert(getPixelCode()==header.id);
resize(header.width,header.height);
unsigned char *mem = getRawImage();
if (header.width!=0&&header.height!=0) {
yAssert(mem!=NULL);
if (getRawImageSize()!=header.imgSize) {
printf("There is a problem reading an image\n");
printf("incoming: width %d, height %d, code %d, quantum %d, size %d\n",
(int)header.width, (int)header.height,
(int)header.id,
(int)header.quantum, (int)header.imgSize);
printf("my space: width %d, height %d, code %d, quantum %d, size %d\n",
width(), height(), getPixelCode(), getQuantum(), getRawImageSize());
}
yAssert(getRawImageSize()==header.imgSize);
ok = connection.expectBlock((char *)getRawImage(),
getRawImageSize());
if (!ok) return false;
}
}
return !connection.isError();
}