mirror of
https://github.com/tesseract-ocr/tesseract.git
synced 2024-11-27 20:59:36 +08:00
Add Image::clone().
This commit is contained in:
parent
2aca22439e
commit
306d296979
@ -634,7 +634,7 @@ Pix *TessBaseAPI::GetThresholdedImage() {
|
||||
if (tesseract_->pix_binary() == nullptr && !Threshold(&tesseract_->mutable_pix_binary()->pix_)) {
|
||||
return nullptr;
|
||||
}
|
||||
return pixClone(tesseract_->pix_binary());
|
||||
return tesseract_->pix_binary().clone();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -297,7 +297,7 @@ ColumnFinder *Tesseract::SetupPageSegAndDetectOrientation(PageSegMode pageseg_mo
|
||||
if (*photo_mask_pix != nullptr) {
|
||||
pix_no_image_ = pixSubtract(nullptr, pix_binary_, *photo_mask_pix);
|
||||
} else {
|
||||
pix_no_image_ = pixClone(pix_binary_);
|
||||
pix_no_image_ = pix_binary_.clone();
|
||||
}
|
||||
pixa_debug_.AddPix(pix_no_image_, "NoImages");
|
||||
pix_no_image_.destroy();
|
||||
|
@ -519,7 +519,7 @@ void Tesseract::PrepareForPageseg() {
|
||||
max_pageseg_strategy = pageseg_strategy;
|
||||
}
|
||||
sub_lang->pix_binary_.destroy();
|
||||
sub_lang->pix_binary_ = pixClone(pix_binary());
|
||||
sub_lang->pix_binary_ = pix_binary().clone();
|
||||
}
|
||||
// Perform shiro-rekha (top-line) splitting and replace the current image by
|
||||
// the newly split image.
|
||||
@ -528,7 +528,7 @@ void Tesseract::PrepareForPageseg() {
|
||||
if (splitter_.Split(true, &pixa_debug_)) {
|
||||
ASSERT_HOST(splitter_.splitted_image());
|
||||
pix_binary_.destroy();
|
||||
pix_binary_ = pixClone(splitter_.splitted_image());
|
||||
pix_binary_ = splitter_.splitted_image().clone();
|
||||
}
|
||||
}
|
||||
|
||||
@ -556,7 +556,7 @@ void Tesseract::PrepareForTessOCR(BLOCK_LIST *block_list, Tesseract *osd_tess, O
|
||||
// Restore pix_binary to the binarized original pix for future reference.
|
||||
ASSERT_HOST(splitter_.orig_pix());
|
||||
pix_binary_.destroy();
|
||||
pix_binary_ = pixClone(splitter_.orig_pix());
|
||||
pix_binary_ = splitter_.orig_pix().clone();
|
||||
// If the pageseg and ocr strategies are different, refresh the block list
|
||||
// (from the last SegmentImage call) with blobs from the real image to be used
|
||||
// for OCR.
|
||||
|
@ -220,7 +220,7 @@ public:
|
||||
pix_original_ = original_pix;
|
||||
// Clone to sublangs as well.
|
||||
for (auto &lang : sub_langs_) {
|
||||
lang->set_pix_original(original_pix ? pixClone(original_pix) : nullptr);
|
||||
lang->set_pix_original(original_pix ? original_pix.clone() : nullptr);
|
||||
}
|
||||
}
|
||||
// Returns a pointer to a Pix representing the best available resolution image
|
||||
|
@ -242,7 +242,7 @@ void ImageThresholder::Init() {
|
||||
Image ImageThresholder::GetPixRect() {
|
||||
if (IsFullImage()) {
|
||||
// Just clone the whole thing.
|
||||
return pixClone(pix_);
|
||||
return pix_.clone();
|
||||
} else {
|
||||
// Crop to the given rectangle.
|
||||
Box *box = boxCreate(rect_left_, rect_top_, rect_width_, rect_height_);
|
||||
|
@ -21,8 +21,12 @@
|
||||
|
||||
namespace tesseract {
|
||||
|
||||
Image Image::clone() const {
|
||||
return pixClone(pix_);
|
||||
}
|
||||
|
||||
Image Image::copy(Image dest) const {
|
||||
return pixCopy(dest, *this);
|
||||
return pixCopy(dest, pix_);
|
||||
}
|
||||
|
||||
void Image::destroy() {
|
||||
|
@ -35,7 +35,8 @@ public:
|
||||
Pix *operator->() const { return pix_; }
|
||||
|
||||
// api
|
||||
Image copy(Image dest = nullptr) const;
|
||||
Image clone() const; // increases refcount
|
||||
Image copy(Image dest = nullptr) const; // does full copy
|
||||
void destroy();
|
||||
};
|
||||
|
||||
|
@ -193,7 +193,7 @@ Image ImageData::GetPix() const {
|
||||
# ifdef GRAPHICS_DISABLED
|
||||
/* The only caller of this is the scaling functions to prescale the
|
||||
* source. Thus we can just return a new pointer to the same data. */
|
||||
return pixClone(internal_pix_);
|
||||
return internal_pix_.clone();
|
||||
# else
|
||||
/* pixCopy always does an actual copy, so the caller can modify the
|
||||
* changed data. */
|
||||
|
@ -115,14 +115,14 @@ void Input::PreparePixInput(const StaticShape &shape, const Image pix, TRand *ra
|
||||
if (color) {
|
||||
// Force RGB.
|
||||
if (depth == 32) {
|
||||
normed_pix = pixClone(var_pix);
|
||||
normed_pix = var_pix.clone();
|
||||
} else {
|
||||
normed_pix = pixConvertTo32(var_pix);
|
||||
}
|
||||
} else {
|
||||
// Convert non-8-bit images to 8 bit.
|
||||
if (depth == 8) {
|
||||
normed_pix = pixClone(var_pix);
|
||||
normed_pix = var_pix.clone();
|
||||
} else {
|
||||
normed_pix = pixConvertTo8(var_pix, false);
|
||||
}
|
||||
|
@ -70,7 +70,7 @@ void ShiroRekhaSplitter::set_orig_pix(Image pix) {
|
||||
if (orig_pix_) {
|
||||
orig_pix_.destroy();
|
||||
}
|
||||
orig_pix_ = pixClone(pix);
|
||||
orig_pix_ = pix.clone();
|
||||
}
|
||||
|
||||
// Top-level method to perform splitting based on current settings.
|
||||
@ -102,7 +102,7 @@ bool ShiroRekhaSplitter::Split(bool split_for_pageseg, DebugPixa *pixa_debug) {
|
||||
|
||||
// Determine all connected components in the input image. A close operation
|
||||
// may be required prior to this, depending on the current settings.
|
||||
Image pix_for_ccs = pixClone(orig_pix_);
|
||||
Image pix_for_ccs = orig_pix_.clone();
|
||||
if (perform_close_ && global_xheight_ != kUnspecifiedXheight && !segmentation_block_list_) {
|
||||
if (devanagari_split_debuglevel > 0) {
|
||||
tprintf("Performing a global close operation..\n");
|
||||
|
@ -78,7 +78,7 @@ protected:
|
||||
nullptr, 0, nullptr, nullptr, false, &mgr),
|
||||
0);
|
||||
bin_pix_ = api_.GetThresholdedImage();
|
||||
*tesseract_->mutable_pix_binary() = pixClone(bin_pix_);
|
||||
*tesseract_->mutable_pix_binary() = bin_pix_.clone();
|
||||
osd_tess->set_source_resolution(api_.tesseract()->source_resolution());
|
||||
tesseract_->set_source_resolution(api_.tesseract()->source_resolution());
|
||||
int width = pixGetWidth(bin_pix_);
|
||||
|
Loading…
Reference in New Issue
Block a user